当前位置:首页 >> 计算机软件及应用 >>

第5章 简单数据结构


第5章 简单数据结构

5.1 数据结构描述
?
?

? ? ? ? ?

5.1.1 基本概念和术语 数据结构是指相互之间存在着一种或多种关系的数据元 素的集合。在任何问题中,数据元素之间都不会是孤立 的,在它们之间都存在着各种关系。根据数据元素间关 系的不同特性,通常有下列四类基本的结构类型: (1)集合结构:在集合结构中,数据元素间的关系是 “属于同一个集合”。集合是元素关系松散的一种结构。 (2)线性结构:这种结构的数据间是一对一的关系。 (3)树型结构:这种结构的数据间是一对多的关系。 (4)图形结构:这种结构的数据间是多对多的关系。 这四种结构的关系可以用图5-1来表示,其中圆点来表 示数据,圆点间的连线表示数据间的关系结构。

集合结构

线性结构

树形结构

图形结构

图5-1 基本结构类型

5.1.2 算法
数据结构的定义与执行都是与一定的算法相 关联的,算法是解题的步骤,可以把算法定 义成解决确定类问题的任意一种特殊的方法。 在计算机科学中,算法要用计算机算法语言 描述,算法代表用计算机解决一类问题的精 确、有效的方法。 算法+数据结构=程序。 算法是对解题方案的准确与完整的描述,算 法为计算机问题定义了严格的执行顺序,在 后续的章节中我们将介绍一些基本的算法。

?

?

?

5.2 数组
?

数组是一种最简单的复合数据类型,它可以使用一个变 量名来表示一组数据,每个数据称为这个数组的一个元 素,各个元素之间通过下标来区分。如果使用一个下标 就能确定数组中的不同元素,这种数组就称为一维数组, 否则就称为多维数组。

?5.2.1
? ?

一维数组

?
? ? ? ? ?

1. 一维数组的声明 声明一个一维数组的格式为: 类型标识符 数组名[ ] 或 类型标识符[ ] 数组名 如:声明一个数组,用来描述学生的考试成绩,可以声 明数据类型为整数的数组score: int score[ ]; 其中类型标识符既可以是基本数据类型,也可以是类或 者接口。

? ?

? ? ?

?
? ?

2. 一维数组的初始化 Java在数组声明时并不为数组分配存储空间, 当仅有数组声明而未分配存储空间时,数组变 量中只是一个值未null的空引用(指针),因 此需要对数组进行初始化。 数组的初始化可以有两种形式: (1)赋初值初始化 在声明数组的同时指定数组元素的初始值。例 如: int intArray[]={4,7,4,5,6,8}; String strArray[]={"Java","Routin"}; 系统将自动按照所指定的数组元素的初始值的 个数,计算出数组的长度并分配相应的存储空 间。

? ?

? ?

?
? ? ? ?

?

?
?

(2)使用new关键字 上一章我们讲到了使用new关键字来初始化类,创建类的 实例-对象。除了为对象进行初始化以外,new关键字还 可以用来对数组进行初始化。使用new进行数组初始化的 格式为: 数组名=new 类型标识符 [数组长度]; 例如,给数组a分配10个整型数据空间: int a[]; a=new int[10]; 或者 int a=new int[10]; 一旦数组初始化或用new分配空间以后,数组的长度就固 定下来了,不能变化,除非用new运算符重新分配空间。 但要注意的是,对一个数组再次分配空间时,如果这个数 组的存储空间的引用没有另外的存储,则该数组的数据将 会丢失。例如: int a[]={1,2,3}; a=new int[5]; // 为a数组重新分配空间,原a数组的值1,2,3 将丢失 用new进行数组空间分配时,如果未指定初始值,则使用 各类数据的默认初始值,对于数值类型,默认初始值为 “0”;对于字符类型,默认初始值为“\u0000”;对于布尔 类型,默认初始值为“false”;对于复合类型,默认初始值 为“null”。

5.2.2 数组的基本操作
?
? ?

?
? ? ?

声明了一个数组以后,就可以对数组进行各种操作了。 对数组的引用,通常是对数组元素的引用。数组元素的 引用方法是在数组名后面的括号中指定其下标。例如: int amount[]; amount=new int[3]; amount[1]=28; amount[2]=2+age[1]; Java语言对于每个数组都有一个指明数组长度的属性 length,它与数组的类型无关。例如,a.length指明数组 a的长度。数组的下标的取值从0开始,一直到数组的长 度减1。

? ? ? ? ? ? ? ? ? ? ? ?

?
? ? ? ? ? ?

【例5-1】 数组基本操作。 1 //ArrayDemo1.java 2 3 public class ArrayDemo1 4{ 5 public static void main(String args[]) 6 { 7 int a[]={1,23,43,56,76}; //声明并初 始化数组a 8 int i,sum=0; 9 System.out.println("数组a的长度为"+a.length); 10 System.out.println("数组a的元素分别是:"); 11 for(i=0;i<=a.length-1;i++) 12 { 13 System.out.print(a[i]+" "); // 输出数 组a的所有元素 14 sum+=a[i]; // 计算所 有数组元素的和 15 } 16 System.out.println("\n数组a的所有元素的和是: "+sum); 17 } 18}

5.2.3 多维数组
?

?

Java支持多维数组,在Java语言中,多维数组可以被看作是 数组的数组,例如二维数组可以被看作是每个元素都是一个 一维数组的数组。多维数组可以帮助我们处理各种复杂的数 据类型。例如数学中的行列式、矩阵等,为了描述和处理其 中的一个数据,需要有两个下标来决定数据的存储位置。 下面以二维数组为例,说明多维数组的使用方法,三维或三 维以上的数组的用法都和二维数组类似。

?
? ?

1. 二维数组的声明
二维数组的声明方式和一维数组类似: 类型标识符 数组名 [ ] [ ] 或者 类型标识符 [ ] [ ] 数组名 其中的类型标识符表示每个元素的数据类型。 我们看到,二维数组的声明方式和一维数组基本一致,只是 为了用来表示二维的概念,使用了两个方括号。

?
? ? ?

?
? ? ? ? ? ? ?

2. 二维数组的初始化
二维数组的初始化工作和一维数组类似,可以通过赋初 值和使用new关键两种方法来完成。 (1)赋初值初始化二维数组 赋初值的方法可以在声明二维数组的同时,给数组元素 赋值,完成初始化工作,其格式如下: 类型标识符 数组名 [ ] [ ]= { {初值表},{初值表},…, {初值表} } 每个初值表是用逗号格开的初始值,例如: int b[][]={{1,2},{3,4}}; 数值的行元素数由初值表的组数来决定,数组的列元素 数由每个初值表中的元素个数来决定。因此,b[0][0]=1, b[0][1]=2,b[1][0]=3,b[1][1]=4,其存储关系如表5-1所 示。

表5-1

二维数组存储关系示意一

b[0][0] b[0][1]
? ? ?

1 2

b[1][0] b[1][1]

3 4

?
? ? ?

(2)使用new关键字初始化二维数组 用new关键字初始化二维数组的方法和一维数组类似, 其格式如下: 数组名= new 类型标识符 [ 行数 ] [ 列数 ]; 例如,声明一个三行四列的整型二维数组: int a[ ][ ]; a =new int[3][4]; 数组a的存储结构如表5-2所示:

表5-2

二维数组存储关系示意二

a[0][0] a[1][0] a[2][0]
?

a[0][1] a[1][1] a[2][1]

a[0][2] a[1][2] a[2][2]

a[0][3] a[1][3] a[2][3]

?

下面我们看一个二维数组的存储与输出程序, 在这个程序中,声明了一个3行3列的二维数 组course,用来存储课程信息。 【例5-2】二维数组示例。

? ? ? ? ? ? ? ? ? ?

?
? ? ? ? ? ? ? ?

1 //MultiArrayDemo.java 2 3 import java.util.*; 4 class MultiArrayDemo 5{ 6 public static void main(String args[]) 7 { 8 // 创建一个二维数组course并初始化 9 String course [][] ={ {"C#程序设计","Java程序设计 ","VB程序设计"}, 10 {"软件工程","计算机基础","信息管理系统"}, 11 {"数据结构","人工职能","网页制作"} }; 12 int i,j; 13 for(i=0;i<3;i++) //循环访问course数组 中的元素 14 { 15 for(j=0;j<3;j++) 16 System.out.print(course[i][j]+"\n"); //依次输出数组元素 17 } 18 } 19 }

5.3 数组的使用
?

?

?
? ? ?

数组在程序设计中是非常实用的。可以将其作为参数传 递,也可以对数组元素进行排序等操作。数组的引入大 大方便了对数据元素的操作。 5.3.1 数组作为方法的参数 在Java中,可以使用数组来作为方法的参数。但是应 注意以下几点: 1)在形式参数表中,数组名后的方括号不能省略,括 号个数和数组的维数相等,不需要给出数组元素的个数。 (2)在实际参数表中,数组名后不需要方括号。 【例5-3】数组作为参数。

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

?
?

1 //ArrayPara.java 2 3 class ArrayPara 4{ 5 public static void main(String args[]) 6 { 7 int a[]={1,2,3,4,5}; 8 int i; 9 System.out.println("数组a的元素是:"); 10 for(i=0;i<a.length;i++) 11 System.out.println("a["+i+"]="+a[i]+" "); 12 // 调用arraySum方法,数组a作为实际参数 13 System.out.println("数组a的元素的和是: "+arraySum(a)); 14 } 15 static int arraySum(int b[]) // arraySum方法,b作为形式 参数 16 { 17 int sum=0; 18 for(int i=0;i<b.length;i++) 19 sum=sum+b[i]; 20 return sum; 21 } 22 }

5.3.2 数组操作的常用方法
?

?

?
? ? ?

Java语言为数组专门设计了一些类和方法,通过使用它 们,可以使程序设计变得更加简单快捷,这里我们对其 中三个进行了解,其它方法大家可以参考JDK文档。 1. 类System的静态方法arraycopy() 这个方法用来进行数组的复制,其格式如下: public static void arraycopy ( 源数组名,源数组元素的 下标,目的数组名,目的数组的下标,复制长度 ) 通过这个方法,我们就可以将源数组中的某一元素复制 到目的数组的某一位置。 【例5-4】arraycopy()方法的使用。

? ? ? ? ?

?
? ? ? ?

?
? ? ? ? ? ? ? ? ? ? ?

1 //ArrayCopy.java 2 3 public class ArrayCopy 4{ 5 public static void main(String args[]) 6 { 7 int a[]={1,2,3,4,5}; 8 int b[]={6,7,8,9,10}; 9 System.out.println("数组a的元素是:"); 10 for(int i=0;i<a.length;i++) 11 System.out.println("a["+i+"]="+a[i]); 12 System.out.println("数组b的元素是:"); 13 for(int i=0;i<b.length;i++) 14 System.out.println("b["+i+"]="+b[i]); 15 System.out.println 16 ("从数组a的第3个元素起复制2个元素到数组b的第4 个元素的位置"); 17 System.arraycopy(a,2,b,3,2); 18 System.out.println("复制后数组b的元素是:"); 19 for(int i=0;i<b.length;i++) 20 System.out.println("b["+i+"]="+b[i]); 21 } 22 }

2. 类Arrays中的sort()方法 ? java.util.Arrays类中提供了数组的升序 排序方法sort(),使用这个方法,我们 可以方便地对数组中的元素进行递增排 序,其格式如下: ? void sort(数组名) ? 【例5-5】sort()方法的使用。
?

? ? ? ? ? ? ? ? ? ?

?
? ? ? ? ? ?

1//ArraySort.java 2 3 import java.util.*; 4 public class ArraySort 5{ 6 public static void main(String args[]) 7 { 8 int a[]={66,98,12,256,11,3,48}; 9 System.out.println("排序前,数组a的元素 是:"); 10 for(int i=0;i<a.length;i++) 11 System.out.println("a["+i+"]="+a[i]); 12 Arrays.sort(a); //排序 13 System.out.println("排序后,数组a的元素 是:"); 14 for(int i=0;i<a.length;i++) 15 System.out.println("a["+i+"]="+a[i]); 16 } 17}

?
?

? ?

?

3. 类Arrays中的bianrySearch()方法 java.util.Arrays类中提供了数组的二分查找方 法binarySearch(),关于二分查找我们在后续 章节详解,其格式如下: int binarySearch(Object a,Object key) 该方法在已经排序的数组a中查找是否有元素 key,如果找到,则返回元素的位置,否则返 回一个负值。 【例5-6】binarySearch()方法的使用。

? ? ? ? ? ? ? ? ? ?

?
? ? ? ? ?

1 //ArraySearch.java 2 3 import java.util.*; 4 public class ArraySearch 5{ 6 public static void main(String args[]) 7 { 8 int a[]={3,11,12,48,66,98,256}; 9 int i; 10 i=Arrays.binarySearch(a,66); //在数组 a中查找元素66 11 if(i>=0) 12 System.out.println("数组a中有66, 其下标为"+i); 13 else 14 System.out.println("数组a中没有元 素66"); 15 } 16 }

5.4 排序
?

尽管Arrarys类为我们提供了sort方法来对数组元素进行排序, 但是在一些程序设计思想中,排序算法仍然是作为一种重要 的思想广泛采用。排序算法有很多,冒泡排序、归并排序、 选择排序、插入排序、希尔排序等,这里介绍几个简单的排 序算法。

?
? ? ? ?

5.4.1 选择排序
选择排序是我们直观上最容易想到的排序方法,它的基本思 想为: 对于给定的n个数,从中选出最小(大)的数,与第一个数交 换位置。 对于除了第一个外的其它n-1个数使用同样方法,将次小(大) 的数置于第2个位置 依次类推,直到所有数都有顺序。

?
? ? ?

假设有原始数据为7、4、0、6、2、5、1,假设数值存在数 组a中,使用选择排序方法示意如下:
a[0] a[1] a[2] a[3] a[4] a[5] a[6]

?
? ? ? ?

原始数据 第1轮排序后 第2轮排序后 第3轮排序后 第4轮排序后 第5轮排序后 第6轮排序后

7 4 0 0 4 7 0 1 7 0 1 2 0 1 2 0 1 2 0 1 2

6 2 5 1 6 2 5 1 6 2 5 4 6 7 5 4 4 7 5 6 4 5 7 6 4 5 6 7

0和7进行交换 1和4进行交换 2和7进行交换 4和6进行交换 5和7进行交换 6和7进行交换 成功

? ? ? ? ? ? ? ? ? ? ? ?

【例5-7】选择排序。 1 //SelSort.java 2 3 class SelSort 4{ 5 public static void main(String args[]) 6 { 7 int a[]={7,4,0,6,2,5,1}; 8 int i,j,k,temp; 9 System.out.println("排序前数组元素"); 10 for(i=0;i<a.length;i++) 11 System.out.print(a[i]+" ");

?
? ? ? ?

?
? ? ? ? ? ? ? ?

?
? ? ? ?

12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 } 30}

for(i=0;i<a.length-1;i++) { k=i; //找到最小的数的下标,记入k中 for(j=i+1;j<a.length;j++) { if(a[j]<a[k]) //比较 k=j; } //将最小的数和第i个数交换 temp=a[i]; a[i]=a[k]; a[k]=temp; } System.out.println(); System.out.println("排序后数组元素"); for(i=0;i<a.length;i++) System.out.print(a[i]+" ");

? ? ? ? ? ? ?

?
? ? ?

?
? ? ? ? ? ?

【例5-8】从键盘输入Double类型数据,并进行选择排序。 1//SelSort2.java 2 3 import java.io.*; 4 class SelSort2 5{ 6 public static void main(String args[])throws IOException 7 { 8 BufferedReader keyin= 9 new BufferedReader(new InputStreamReader(System.in)); 10 double a[],temp; 11 int i,j,k,n; 12 String c; 13 System.out.println("您要对几个数进行排序?请输入个 数:"); 14 c=keyin.readLine(); 15 n=Integer.parseInt(c); 16 a=new double[n]; 17 System.out.println("请输入"+n+"个实数值,每行一个");

? ? ? ? ? ?

?
? ? ? ?

?
? ? ? ? ?

18 数组 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 } 34}

for(i=0;i<a.length;i++) {

//将数值存入

c=keyin.readLine(); a[i]=Double.parseDouble(c); } for(i=0;i<a.length-1;i++) //选择排序 { k=i; for(j=i+1;j<a.length;j++) if(a[j]<a[k]) k=j; temp=a[i];a[i]=a[k];a[k]=temp; } System.out.println("排序后:"); for(i=0;i<a.length;i++) System.out.print(a[i]+" ");

5.4.2 冒泡排序
?

?

?

?

?

冒泡排序的思想来自于水中的冒气泡,是根 据轻气泡不能在重气泡之下的原则。 冒泡排序思想(升序)如下: 对于给定的n个数,相邻的两个数进行比较, 如果不符合从小到大的顺序就进行交换,一 趟以后最大的数在最后。 对于除了最后一个外的其它n-1个数使用同样 方法,将次大的数置于倒数第2个位置。 依次类推。

?
? ? ? ? ? ? ? ? ? ?

假设有原始数据为32、87、39、4、345、365、9、234,假设数据 存储在数组中,使用冒泡排序方法的一趟排序示意如下: 一趟排序 a[0] a[1] a[2] a[3] a[4] a[5] a[6] a[7] 32 87 39 4 345 365 9 234 32和87比较,不交换 32 87 39 4 345 365 9 234 87和39比较,交换 32 39 87 4 345 365 9 234 87和4比较,交换 32 39 4 87 345 365 9 234 87和345比较,不交换 32 39 4 87 345 365 9 234 345和365比较,不交换 32 39 4 87 345 365 9 234 365和9比较,交换 32 39 4 87 345 9 365 234 365和234比较,交换 32 39 4 87 345 9 234 365 一趟排序完成

?
? ? ? ? ? ? ? ? ? ?

多趟排序 a[0] a[1] a[2] a[3] a[4] 初时序列: 32 87 39 1趟排序后: 32 39 4 2趟排序后: 32 4 39 3趟排序后: 4 32 39 4趟排序后: 4 32 9 5趟排序后: 4 9 32 6趟排序后: 4 9 32 7趟排序后: 4 9 32 8趟排序后: 4 9 32

a[5] a[6] a[7] 4 345 365 9 87 345 9 234 87 9 234 345 9 87 234 345 39 87 234 345 39 87 234 345 39 87 234 345 39 87 234 345 39 87 234 345

无序区范围 234 365 a[7] 365 a[6]-a[7] 365 a[5]-a[7] 365 a[4]-a[7] 365 a[3]-a[7] 365 a[2]-a[7] 365 a[1]-a[7] 365 a[0]-a[7]

?
? ? ?

?
? ? ?

?
? ? ? ? ?

【例5-9】冒泡排序。 1 //BubbleSort.java 2 public class BubbleSort 3{ 4 public static void main(String args[]) 5 { 6 int a[]={32,87,39,4,345,645,9,234}; 7 int i,j,temp; 8 for(i=1;i<a.length;i++) 9 { 10 //一趟排序 11 for(j=1;j<=a.length-i;j++) 12 { 13 //相邻数进行比较,不符合 顺序则交换

? ? ? ? ? ? ? ? ? ? ? ?

14 15 16 17 18 19 20 21 22 23 24 } 25}

if(a[j]<a[j-1]) { temp=a[j-1]; a[j-1]=a[j]; a[j]=temp; } } } for(i=0;i<a.length;i++) System.out.print(a[i]+" ");

5.4.3 插入排序

?

?

插入排序的思想是:假设待排序的n个数值存放在数组a 中。初始时,a[0]自成一个有序区,无序区为a[1]~a[n1]。从i=1起直至i=n-1为止,依次将a[i]插入当前的有序 区a[0]~a[i-1]中,最终生成含n个记录的有序区。 插入排序与打扑克时整理手上的牌非常类似。摸来的第 1张牌无须整理,此后每次从桌上的牌(无序区)中摸 最上面的1张并插入左手的牌(有序区)中正确的位置 上。为了找到这个正确的位置,须自左向右(或自右向 左)将摸来的牌与左手中已有的牌逐一比较。

5.5 查找
?

在数组中查找数值是一种比较常用到的方法,Arrarys类 为我们提供了二分查找方法,为了熟悉数组的使用,这 里我们自己编写查找方法。

?
? ?

5.5.1 顺序查找
顾名思义,顺序查找就是从一端起查找,直到找到所查 找的元素为止,顺序查找不要求原来的数值有序。 如果是用数组存储数值,从数组的第一个元素开始依次 比较是否是要查找的数,找到则记录下标,到数组末尾 仍然没有则为没有找到。

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

?
?

【例5-10】顺序查找。 1//OrderSearch.java 2 3 public class OrderSearch 4{ 5 public static void main(String args[]) 6 { 7 int a[]={36, 606,45,67,9,56,20,6}; 8 int target=94; //在数组a中查找元素94 9 int i,j; //i记录目标元素的下标 10 i=-1; //为i赋初值-1,任意负数均 可 11 for(j=0;j<a.length;j++) //查找 12 { 13 if(a[j]==target){ i=j;break;} //如果找到, 则记录下标,且停止查找 14 } 15 if(i<0) //如果i值保持原值,则 没有找到 16 System.out.println("没有找到"+target); 17 else //否则,i值记录的为目 标元素下标 18 System.out.println("找到,下标为"+i); 19 } 20 }

5.5.2 二分查找
?
?

?

在数据是有序的情况下,二分查找是一个效 率很高的查找方法。 二分查找采用的是分治法。分治的基本思想 是将一个规模为n的问题分解为k个规模较小 的子问题,这些子问题互相独立且与原问题 相同。找出各部分的解,然后把各部分的解 组合成整个问题的解。 二分查找要求数据是有序的(以升序为例), 每次我们选择数组中间的那个数(mid)与要 查的数(target)比较,确定target在mid之前还 是之后,然后用同样的方法继续比较查找。

?
? ? ? ? ? ? ? ? ? ? ? ?

1//BranSearch.java 2 3 public class BranSearch 4{ 5 public static void main(String args[]) 6 { 7 int a[]={3,20,45,67,94,556,606,690}; 8 int i=search(a,94); 9 if(i==-1) 10 System.out.println("没有该数"); 11 else 12 System.out.println("找到了,下 标为"+i); 13 }

? ? ? ? ? ? ? ? ? ? ? ?

?
? ? ?

14 static int search(int[] x,int k) //在整型数组中查找元素的二分查找 方法 15 { //low、high和mid分别用来记录需查找部分的最小、中间和 最大下标 16 int low,high,mid=0; 17 low=0;high=x.length-1; //初时时,low和hign为整个数组 最小最大下标 18 while(low<=high) //如果low小于等于high,需要继续 查找 19 { 20 mid=(low+high)/2; //mid为需要查找部分的中 间下标 21 if(k==x[mid]) break; //如果中间值等于查找目标 k,则成功,停止查找 22 //否则,如果k小于中间元素,则k只可能出现在low到 mid-1的下标间 23 else if(k<x[mid]) high=mid-1; 24 else low=mid+1; //否则,k可能在mid+1到 hight之间 25 } 26 if(low<=high) return mid; //如果low<high,则查到了,下标为 mid 27 else return -1; //否则,没有成功,返回负值 28 } 29 }

? ? ? ? ? ? ? ? ? ?

?
? ? ? ?

下边我们对【例5-11】中的查找过程进行示意,查找目标为94。 查找区域 a[0] a[1] a[2] a[3] a[4] a[5] a[6] a[7] low=0 high=7 mid=3 3 20 45 67 94 556 606 690 94>a[mid],则low=4 high=7 mid=5 94 556 606 690 94<a[mid],则low=4 high=4 mid=4 94 94==a[mid],成功 如果查找的目标是40,则查找过程的示意如下。 查找区域 a[0] a[1] a[2] a[3] a[4] a[5] a[6] a[7] low=0 high=7 mid=3 3 20 45 67 94 556 606 690 40<a[mid],则low=0 high=2 mid=1 3 20 45 40>a[mid],则low=2 high=2 mid=2 45 40<a[mid],则low=2 high=1,low>high 失败 从示意图中可以看出,二分查找每次排除一半的范围,因此对于有序数值的查找, 二分查找是一个效率很高的方法。

本章小结
?
? ?

?

? ?

这一章我们学习了数据结构与算法的基本概念,并且学习了 两种数据结构的简单使用:数组和向量。 数组可以用来存储一组数据类型相同的数据。 除了提供了一维数组以外,我们还介绍了多维数组,特别介 绍了二维数组的简单的使用。通过使用二维数组,可以用来 存储数学中的矩阵等较为复杂的数据类型。 向量可以用来存储一组数据长度可变的数据,因此具有更加 灵活的可操作性。向量对所要存储的数据格式有一个要求就 是:所要存储的数据类型必须以对象的形式存在,因此需要 使用Java的预定义类所提供的方法将所要存储的数据类型转 换为对应的对象类型。 向量中提供了许多预定义方法,如访问、添加、删除等,更 加方便了对数据的访问。 排序和查找是数据结构中的经典算法,本章中仅作了几个经 典排序和查找方法的讲述,更多的方法请参阅各种数据结构 与算法书籍。


相关文章:
第5章 常用数据结构与算法
第5 章 常用数据结构与算法 5.1 字符串 字符串(string)类型直接从 类派生,...(1) 规则字符串:由包含在双引号中的零个或多个字符组成,并且可以 包含简单...
数据结构课件 第5章数组基本操作函数
数据结构课件 第5章数组基本操作函数 隐藏>> #include<stdarg.h> #define MAX_ARRAY_DIM 8 typedef struct { ElemType *base; int dim; int *bounds; int ...
第5章 常用数据结构与算法
第5章 常用数据结构与算法_计算机软件及应用_IT/计算机_专业资料。第 5 章 常用...由包含在双引号中的零个或多个字符组成 ,并且可以 包含简单转义序列、十六进制...
《数据结构》习题集:第5章 数组与广义表
X 插入和删除操作是数据结构中最基本的两种操作,所以这两种操作在数组中也会...“数据结构”课程组编制 2011-3-1 数据结构课后练习题 第 5 章 数组与广义表...
数据结构 第五章 数组和广义表
第5章 数组和广义表 前面几章我们讨论了线性表、栈、队列和串都是线性数据结构...其中数组中的数据元素 ai 是一个数据结构,它可以是整型、实型等简单数 据类型...
数据结构答案 第5章 串学习指导
数据结构答案 第5章 串学习指导_IT/计算机_专业资料。数据结构答案 ...3.串的基本运算 .(1)求串长:LenStr(s)。(2)串连接:ConcatStr(s1,s2) ...
数据结构第五章
数据结构第五章_制度/规范_工作范文_实用文档 暂无评价|0人阅读|0次下载|举报文档 数据结构第五章_制度/规范_工作范文_实用文档。一、假设有二维数组 A6*8,...
数据结构第五章图习题
数据结构第五章图习题_调查/报告_表格/模板_实用文档。数据结构第五章图习题 ...(5)判定有向图中从顶点 vi 到顶点 vj 是否存在一条长为 k 的简单路径。 ...
第5章 数据结构及常用算法
第五章 数据结构及常用算法 本章内容: 常用集合元素有: 向量(Vector), 枚举(Enumeration), 散列表(哈希表)(Hashtable)和属性(Properties) ﹑数据结构中的接口﹑...
数据结构第一章
数据结构第4章 数据结构第5章 数据结构第6章 数据结构第7章1...简答题: 1、数据结构和数据类型两个概念之间有区别吗? 答:简单地说,数据结构...
更多相关标签: