在日常生活中,线性表的例子比比皆是。例如,26个英文字母的字母表就是一个线性表,表中的数据元素是单个字母。
在稍复杂的线性表中,一个数据元素可以包含若干个数据项。例如在一个学生基本信息表中,每个学生为一个数据元素,包括学号、姚名、性别、籍贯、专业等数据项。
由以上示例可以看出,它们的数据元素虽然不同,但同一线性表中的元素必定具有相同的特性,即属于同一数据对象,相邻数据元素之间存在着序偶关系。
1.线性表的定义和特点
定义:
由n(n≥0)个数据特性相同的元素构成的有限序列,称为线性表。
线性表中元素的个数n(n≥0)定义为线性表的长度,当n=0时称之为空表。
特点:
(1) 存在唯一的一个被称作 “第一个” 的数据元素;
(2) 存在唯一的一个被称作 “最后一个” 的数据元素;
(3) 除第一个元素之外,结构中的每个数据元素均只有一个前驱;
(4) 除最后一个元素之外,结构中的每个数据元素均只有一个后继。
2.线性表
线性表的 “顺序表示” 指的是用一组地址连续的存储单元依次存储线性表的数据元素,这种表示也称作线性表的顺序存储结构或顺序映像,因此称这种存储结构的线性表为顺序表。
线性表的特点:逻辑上相邻的数据元素,其物理位置也是相邻的。
设线性表的每个元素需占用n个存储单元,并以所占的第一个单元的存储地址为数据元素的存储位置起始,且第i+1个数据元素的储存位置为LOC(a(i+1)),可得LOC(a(i+1))=LOC(a1)+(i-1)*n。
LOC(a1)是线性表的第一个数据元素a的存储位置,通常称作线性表的起始位置或基地址,表中相邻的元素a1和a2的存储位置LOC(a1)和LOC(a2)是相邻的。
每一个数据元素的存储位置都和线性表的起始位置相差一个常数,这个常数和数据元素在线性表中的位序成正比。由此,只要确定了存储线性表的起始位置,线性表中任一数据元素都可随机存取,所以线性表的顺序存储结构是一种随机存取的存储结构。
1.存储结构
#define MAXSIZE 100 //顺序表可能达到的最大长度
typedef struct {
ElemType *elem; //指向数据元素的基地址
int length; //线性表的当前长度
}SqList; //顺序表的结构类型SqList
2.初始化
1.为顺序表的初始化操作就是构造一个预定义大小的数组空间,使elem指向这段空间的基地址
2.将表的当前长度设为0