Chapter3 线性表
- 线性表的定义
- 线性表(List):零个或多个数据元素的有限序列。
- 若将线性表记为(a1, .,a.1, ai, ai+1, .,. an),则表中al-1 领先于a, a领先于ai+1,称ai-1是ai的直接前驱元素,ai+1 是a的直接后继元素。当i=1, 2,…,n-1时,a有且仅有一一个直接后继,当i=2,3, …, n时,a有且仅有一一个直接前驱。
- 线性表元素的个数n (n≥0)定义为线性表的长度,当n=0时,称为空表。
- 线性表的抽象数据类型
ADT线性表(List)
Data
线性表的数据对象集合为{a1,a2...an},.每个元素的类型均为DataType。其中,除第一个元素a1外,每一个元素有且只有一个直接前驱元素,除了最后一个元素an外,每一个元素有且只有一个直接后继元素。数据元素之间的关系是一对一的关系。
Operation
InitList (*L) : 初始化操作,建立一个空的线性表L。
ListEmpty(L) : 若线性表为空,返回true,否则返回false。
ClearList(*L) :将线性表清空。
GetElem(L,i,*e) :将线性表L中的第i个位置元素值返回给e。
LocateElem(L,e) :在线性表L中查找与给定值e相等的元素,如果查找成功,返回
该元素在表中序号表示成功;否则,返回0表示失败。
ListInsert (*L,i,e):在线性表L中的第i个位置插入新元素e。
ListDelete (*L,1,*e) :删除线性表L中第i个位置元素,并用e返回其值。
ListLength (L) :返回线性表L的元素个数。
endADT
- 线性表的顺序存储结构
- 既然线性表的每个数据元素的类型都相同,所以可以用C语言(其他语言也相同)的一维数组来实现顺序存储结构,即把第一个数据元素存到数组下标为0的位置中,接着把线性表相邻的元素存储在数组中相邻的位置。
#define MAXSIZE 20
typedef int ElemType;
typedef struct
{
ElemType data [MAXSIZE];
int length;
}SqList;
- 这里,我们就发现描述顺序存储结构需要三个属性:
存储空间的起始位置:数组data,它的存储位置就是存储空间的存储位置。
线性表的最大存储容量:数组长度MaxSize。
线性表的当前长度: length。
- 数据长度与线性表长度的区别
- 数组的长度是存放线性表的存储空间的长度,存储分配后这个量是一-般是不变的。
- 线性表的长度是线性表中数据元素的个数,随着线性表插入和删除操作的进行,这个量是变化的。
- 在任意时刻,线性表的长度应该小于等于数组的长度。