3.1 线性表的定义
线性表(List):零个或多个数据元素的有限序列。
n为元素总个数,即表长;当n=0时称为空表。
是第i个数据元素,称i为数据元素在线性表中的位序。
例子: 分析26个字母组成的英文表
(A,B,C,D,...,Z)
数据元素都是字母; 元素间的关系是线性的。
12星座(白羊座、金牛座、双子座、巨蟹座、狮子座、处女座、天秤座、天蝎座、射手座、摩羯座、水瓶座、双鱼座)
同一线性表中的元素必定具有相同特性,数据元素间的关系是线性关系。
3.2 线性表的抽象数据类型
ADT List{
数据对象:D={|属于Elemset,(i=1,2,3...,n,n0}
数据关系:R={<,>|,,属于D,(i=2,3,...,n)}
基本操作:
lnitList(&L); DestroyList(&L);
Listlnsert(&L,i,e); ListDelete(&L,i,&e);
.....等等
}ADT List
注意一个容易混淆的地方:
当你传递一个参数给函数时,这个参数会不会在函数内被改动决定了使用什么参数形式。
如果需要被改动,则需要传递指向这个参数的指针。
如果不用被改动,可以直接传递这个参数。
3.3 线性表的顺序存储结构
3.3.1 顺序存储定义
线性表的顺序存储结构,指的是用一段地址连续的存储单元依次存储线性表的数据元素。
顺序表的特点:以物理位置相邻表示逻辑关系,任一元素均可随机存取。
3.3.2 顺序存储方式
顺序结构存储结构代码:
#define MAXSIZE 20 /*存储空间初始分配量 */
typedef int ElemType; /*ElemType类型根据实际情况决定,这里定义为int*/
typedef struct
{
ElemType data[MAXSIZE]; /*数组,存储数据元素*/
int length; /*线性表当前长度*/
}SqList;
补充:C语言的内存动态分配
//数组动态分配
typedef struct
{
ElemType *data;
int length;
}SqList;
SqList L;
L.data=(ElemType*)malloc(sizeof(ElemType)*MaxSize);
补充:C++的动态存储分配
//new 类型名T(初值列表)
int *p1=new int;
或 int*p1=new int(10);
补充:C++中参数传递:
参数传递有两种方式:
- 值传递(参数为整数、实型、字符型等)
- 传地址(参数为指针变量、引用类型、数组名)
3.3.3 数据长度和线性表长度的区别
数组的长度是存放线性表的存储空间的长度,存储分配后这个量一般不变。
线性表的长度是线性表中数据元素的个数,随着线性表插入和删除操作的进行,这个量是变化的。
在任意时刻,线性表的长度应该小于等于数组的长度。
3.3.4 地址计算方法