93)第六章数据结构 在程序设计的过程中,数据的组织和表示是很重 要的,因为数据是程序的处理对象,数据的表示形式 关系到整个程序的运行效率和解决问题的能力,前面 我们已经初步了解了数据的最基本形式-整数、实数、 字符、字符串等基本数据类型,也学习了在面向对象 的程序设计环境下,类和对象的构造和组织。下面我 们进一步学习其他在基本数据类型的基础构造出来的 一些复杂数据类型,如数组、指针、结构、共用体、 枚举类型等。使我们在类和对象的设计过程中,可以 运用更多的数据类型
第六章 数据结构 在程序设计的过程中,数据的组织和表示是很重 要的,因为数据是程序的处理对象,数据的表示形式 关系到整个程序的运行效率和解决问题的能力,前面 我们已经初步了解了数据的最基本形式-整数、实数、 字符、字符串等基本数据类型,也学习了在面向对象 的程序设计环境下,类和对象的构造和组织。下面我 们进一步学习其他在基本数据类型的基础构造出来的 一些复杂数据类型,如数组、指针、结构、共用体、 枚举类型等。使我们在类和对象的设计过程中,可以 运用更多的数据类型
第六章数据牿构川 61数组概念和一维数组 65结构类型 62二维数组 6.6共用体 63字符串处理 67排序和查找 6.4指针概念
第六章 数据结构 6.1 数组概念和一维数组 6.5 结构类型 6.4 指针概念 6.3 字符串处理 6.2 二维数组 6.7 排序和查找 6.6 共用体
6.1数组 数组类型是一种构造型(组合型)的数据类 型。数组是由一组具有相同数据类型的元素组成的 集合,用来描述现实世界中具有相同性质的有序事 物集合的抽象,如班级某个学生各门课的成绩,或 者整个班级某门课的成绩。数组的类型就是这组元 素的数据类型。构成数组的这组元素在内存中占用 组连续的存储单元。可以用一个统一的数组名标 识这一组数据,而用下标来指明数组中各元素的序 号。根据数组的维数,分为一维数组、二维数组和 多维数组,常用的是一维和二维数组。 心
6.1 数组 数组类型是一种构造型(组合型)的数据类 型。 数组是由一组具有相同数据类型的元素组成的 集合,用来描述现实世界中具有相同性质的有序事 物集合的抽象,如班级某个学生各门课的成绩,或 者整个班级某门课的成绩。数组的类型就是这组元 素的数据类型。构成数组的这组元素在内存中占用 一组连续的存储单元。可以用一个统一的数组名标 识这一组数据,而用下标来指明数组中各元素的序 号。根据数组的维数,分为一维数组、二维数组和 多维数组,常用的是一维和二维数组
611一维組 维数组的定义: 类型数组名[常量表达式] 其中,类型是数组类型,即数组中各元素的数据类型,可 以是整型、浮点型、字符型等基本类型,也可以其他复杂的数 据类型。数组名是一个标识符,代表着数组元素在内存中的起 始地址,它的命名规则与变量名的命名一样。常量表达式又称 下标表达式,表示一维数组中元素的个数,即数组长度(也称 为数组大小),用一对方括号“[]括起来。方括号“[]的 个数代表数组的维数,一个方括号表示一维数组。 例如:下面分别定义了一个具有10个元素的字符型数组a 个具有5个元素的整型数组b和一个有20个元素的实数数组f: char a[10]; int b[5l; float f[201 心
6.1.1 一维数组 一维数组的定义: 类型 数组名[常量表达式]; 其中,类型是数组类型,即数组中各元素的数据类型,可 以是整型、浮点型、字符型等基本类型,也可以其他复杂的数 据类型。数组名是一个标识符,代表着数组元素在内存中的起 始地址,它的命名规则与变量名的命名一样。常量表达式又称 下标表达式,表示一维数组中元素的个数,即数组长度(也称 为数组大小),用一对方括号“[ ]”括起来。方括号“[ ]”的 个数代表数组的维数,一个方括号表示一维数组。 例如:下面分别定义了一个具有10个元素的字符型数组a、 一个具有5个元素的整型数组b和一个有20个元素的实数数组f: char a[10]; int b[5]; float f[20];
6.1.1一靠数组 心 对上面定义的数组b,也可以采用下面这种定义方法: cons七in七size=5 int blsizeli 注意:在定义数组时,不能用变量来描述数组定义中的元素个 数。例如,下面的定义方式是不合法的:intb[n]; 下标指明了数组中每个元素的序号,下标值为整数,用数组 名加下标值就可以访问数组中对应的某个元素。下标值从0开始, 因此对于一个具有n个元素的一维数组来说,它的下标值是0~n 例如,对上例中定义的数组b来说,b[0]是数组中的第一个 元素,b们]是数组中的第二个元素,…,b[4]是数组中的最后一 个元素,而不包含b5] 数组元素在内存中是顺序存储的。对于一维数组,就是简 单地按下标顺序存储。 例如,对上面定义的整型数组b,在内存中的存放顺序如下 图所示: b[0 b[2] b[3] b4]
6.1.1 一维数组 对上面定义的数组b,也可以采用下面这种定义方法: const int size=5; int b[size]; 注意:在定义数组时,不能用变量来描述数组定义中的元素个 数。例如,下面的定义方式是不合法的: int b[n]; 下标指明了数组中每个元素的序号,下标值为整数,用数组 名加下标值就可以访问数组中对应的某个元素。下标值从0开始, 因此对于一个具有n个元素的一维数组来说,它的下标值是0~ n- 1。例如,对上例中定义的数组b来说,b[0]是数组中的第一个 元素,b[1]是数组中的第二个元素,…,b[4]是数组中的最后一 个元素,而不包含b[5]。 数组元素在内存中是顺序存储的。对于一维数组,就是简 单地按下标顺序存储。 例如,对上面定义的整型数组b,在内存中的存放顺序如下 图所示: b[0] b[1] b[2] b[3] b[4]
1.1一飘组初始化 维数组的初始化: 在定义数组时对其中的全部或部分指定初始值 这称为数组的初始化。初始化的语法格式为: 类型数组名数组大小]=值1,值2,…,值n}; 例如:定义一个字符数组a并进行初始化 char a[5] ta,'b carey 或 char al ta b 'es 定义一个整数数组b并进行初始化 intb[7]={11,22,65,87,100,42,77};
6.1.1 一维数组初始化 一维数组的初始化: 在定义数组时对其中的全部或部分指定初始值, 这称为数组的初始化。初始化的语法格式为: 类型 数组名[数组大小]={值1,值2,…,值n}; 例如:定义一个字符数组a并进行初始化。 char a[5]={’a’,’b’,’c’,’d’,’e’}; 或: char a[ ]={’a’,’b’,’c’,’d’,’e’}; 定义一个整数数组b并进行初始化 int b[7]={11, 22, 65, 87, 100, 42, 77};
61.1一维数组初始化 注意:在对数组初始化时,也可以只对数组中的部分元素指 定初始值。也即,初始化值的个数可以少于或等于数组定义 的元素的个数,但不可以多于数组元素的个数,否则会引起 编译错误。 当初始化值的个数少于数组元素个数时,前面的元素按 顺序初始化相应的值,后面不足的部分由系统自动初始化为 零(对数值数组)或空字符‘0(对字符数组) intb[7]={11,22,65,87} 维数组的赋值 1.用“=“赋值 与数组元素的初始化不同,在给数组元素进行赋值时, 必须逐一赋值。 例如:对于下述的数组初始化 inta[3]={123} 心
6.1.1 一维数组初始化 注意:在对数组初始化时,也可以只对数组中的部分元素指 定初始值。也即,初始化值的个数可以少于或等于数组定义 的元素的个数,但不可以多于数组元素的个数,否则会引起 编译错误。 当初始化值的个数少于数组元素个数时,前面的元素按 顺序初始化相应的值,后面不足的部分由系统自动初始化为 零(对数值数组)或空字符‘\0’(对字符数组)。 int b[7]={11, 22, 65, 87}; 一维数组的赋值 1. 用“=”赋值 与数组元素的初始化不同,在给数组元素进行赋值时, 必须逐一赋值。 例如:对于下述的数组初始化: int a[3]={1,2,3};
6.12一维数組赋值 其等价的赋值形式如下: int a[3]; a[0]=1 a[1]=2 a[2]=3; 若要在数组之间进行赋值,也只能一个一个元素地赋值。 例如:将上述数组a的值赋给另一个同样大小的数组b, 可以利用下面的循环完成赋值操作: for(i=0;i>数组名;∥/只适合用于字符数组 或 cn>>数组名[下标] 心
6.1.2 一维数组赋值 其等价的赋值形式如下: int a[3]; a[0]=1; a[1]=2; a[2]=3; 若要在数组之间进行赋值,也只能一个一个元素地赋值。 例如:将上述数组a的值赋给另一个同样大小的数组b, 可以利用下面的循环完成赋值操作: for (i=0;i>数组名;// 只适合用于字符数组 或 cin>>数组名[下标];
6.12一维数組赋值 例如:对一个大小为5的字符型数组a赋值,可以用 下列两种方式: char a5];//只适合用于字符数组 cIn>sa 或 char a[S]P int i for (i=o;i>a[fi 心
6.1.2 一维数组赋值 例如:对一个大小为5的字符型数组a赋值,可以用 下列两种方式: char a[5]; // 只适合用于字符数组 cin>>a; 或 char a[5]; int i; for (i=0;i>a[I];
61.3一维组引用 一维数组元素的引用: 数组在定义后即可引用,引用是以元素为单位的。其引用 形式为:数组名[下标] 指明了引用数组名的数组中下标所标识的元素。下标可 以是整常数或整型表达式。例如a[2+1]、a[i+订等(i和为 整型变量)。例如: a[2]=10 /将10赋给数组中的a[2]元素。 a[S]=a[2] /将a[2]元素的值赋给a[5]元素 cout<<a[5]; /打印a5]元素的值 注意区分定义与引用形式上的相似与含义上的区分,定义时 是指数组的大小空间;引用时是指引用下标标识的元素。 引用时一定要注意下标的值不要超过数组的范围,否则会产 生数组越界问题。例如:定义了一个整型数组a:inta[10 数组a的合法下标为o~9。如果程序要求给a[10]赋值,将可能 导致程序出错,甚至系统崩溃。 心
6.1.3 一维数组引用 一维数组元素的引用: 数组在定义后即可引用,引用是以元素为单位的。其引用 形式为: 数组名[下标] 指明了引用数组名的数组中下标所标识的元素。下标可 以是整常数或整型表达式。例如a[2+1]、a[i+j]等(i和j为 整型变量)。例如: a[2]=10; //将10赋给数组中的a[2]元素。 a[5]=a[2]; //将a[2]元素的值赋给a[5]元素 cout<<a[5]; //打印a[5]元素的值 注意区分定义与引用形式上的相似与含义上的区分,定义时 是指数组的大小空间;引用时是指引用下标标识的元素。 引用时一定要注意下标的值不要超过数组的范围,否则会产 生数组越界问题。例如:定义了一个整型数组a:int a[10]; 数组a的合法下标为0~9。如果程序要求给a[10]赋值,将可能 导致程序出错,甚至系统崩溃