线性表的定义:
线性表(List):由零个或多个数据元素组成的有限序列
线性表的特征:
线性表是一个序列、第一个元素无前驱、最后一个元素无后继、其它元素有且只有一个前驱和后继
线性表元素的个数n(n >= 0)定义为线性表的长度,当n= 0时,称为空表。
抽象数据类型:
抽象数据类型(Abstract Data Type, ADT)是指一个数学模型及定义在该模型上的一组操作。
抽象数据类型的定义取决于它的一组逻辑特性与它在计算机内部如何表示和实现无关。
抽象数据类型的标准格式:
ADT 抽象数据类型名
Data
数据元素之间逻辑关系的定义
Operation
操作
endADT
抽象数据类型的操作:
Operation
InitList(*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,i, *e):删除线性表L中第i个元素,并用e返回其值
ListLength(L):返回线性表L的元素个数
线性表的两种存储结构:
线性表的顺序存储结构,指的是用一段地址连续的存储单元依次存储线性表的数据元素
线性表顺序存储结构的代码:
#defineMAXSIZE 20
typedefint ElemType;
typedefstruct
{
ElemType data[MAXSIZZE];
int length; //线性表当前长度
}Sqlist;
总结:
顺序存储结构封装需要三个属性:
• 存储空间的起始位置,数组data,它的存储位置是线性表存储空间的存储位置
• 线性表的最大存储容量:数组的长度MaxSize
• 线性表的当前长度:length
线性表的当前长度是线性表中元素的个数
假设ElenType占用的是C个存储单元(字节),那么线性表中第i+1个数据元素和第i个数据元素的存储位置的关系是(LOC表示获得
存储位置的函数);LOC(ai + 1) = LOC(ai) + c
线性表顺序存储结构的优缺点:
优:
• 无需为表示表中元素的逻辑关系而增加额外的存储空间
• 可以快速地存取表中任意位置的元素
缺:
• 插入和删除操作需要移动大量元素
• 当线性表长度变化较大时,难以确定存储空间的容量
• 容易造成存储空间的“碎片”
线性表的链式存储结构的特点是用一组任意的存储单元存储线性表的数据元素,这组存储单元可以存在于内存中任意未被占用的位置
链表中的第一个结点的存储位置叫做头指针,最后一个结点指针为空(NULL)