目录
回顾:
2.1 线性表的定义与特点
1.线性表:具有相同特性的数据元素的一个有限序列。
e.g.26个字母(A,……,Z):数据元素都是字母;元素间关系是线性。
2.2 案例引入
1.稀疏多项式要把指数单独存储,顺序多项式则不需要。
求和:
存在问题:
(1)存储空间分配不灵活;
(2)运算的空间复杂度高。
所以可以使用链式存储结构:
2.图书信息管理系统
所以要适当的选择合适的存储结构。
3.总结
(1)线性表中数据元素的类型可以为:简单类型,也可以为复杂类型;
(2)许多实际应用问题的基本操作有很大的相似性,不应为每个具体应用单独编写一个程序;
(3)从具体应用中抽象出共性的逻辑结构和基本操作(抽象数据类型),然后实现其存储结构和基本操作。
2.3 线性表的类型定义
1.抽象数据类型线性表定义:
ADT List{
数据对象:D = {ai | ai属于Elemset,(i = 1,2,……,n, n≥0)}
数据关系:R = {<ai-1, ai> | ai-1, ai属于D,(i=2,3,……,n)}
基本操作:
InitList(&L); // 构造一个空的线性表L
DestroyList(&L); // 销毁线性表L,前提线性表L存在
ClearList(&L); // 将线性表L重置为空表,前提线性表L存在
ListEmpty(L); // 若L为空表,则返回True;否则返回False;前提线性表L存在
ListLength(L); // 返回L中的数据元素个数,前提线性表L存在
ListInsert(&L,i,e);
ListDelete(&L,i,&e); //
GetElem(L,i,&e); // 用e返回线性表L中第i个数据元素的值,前提线性表L存在,1<=i<=ListLength(L)
LocateElem(L,e,compare()); // 返回L中第1个与e满足compare()的数据元素的位序。若这样的数据元素不存在则返回值为0,前提L存在,compare()是数据元素判定函数;即找一个与e这个值关于compare这个条件的
……等等
}ADT List //定义了一个叫做List的抽象类型
基本操作:
InitList(&L);
构造一个空的线性表L
DestroyList(&L);
销毁线性表L,前提线性表L存在
ClearList(&L);
将线性表L重置为空表,前提线性表L存在
ListEmpty(L);
若L为空表,则返回True;否则返回False;前提线性表L存在
ListLength(L);
返回L中的数据元素个数,前提线性表L存在
ListInsert(&L,i,e);
在L的第i个位置之前插入新的数据元素e,L的长度加1,前提L存在,i<=i<=ListLength(L)+1。
ListDelete(&L,i,&e);
删除L的第i个数据元素,并用e返回其值,L的长度减1,前提L存在,i<=i<=ListLength(L)。
ListTraverse(&L, visited())
依次对线性表中每个元素调用visited(),前提L存在。
GetElem(L,i,&e);
用e返回线性表L中第i个数据元素的值,前提线性表L存在,1<=i<=ListLength(L)
LocateElem(L,e,compare());
返回L中第1个与e满足compare()的数据元素的位序。若这样的数据元素不存在则返回值为0,前提L存在,compare()是数据元素判定函数;即找一个与e这个值关于compare这个条件的
PriorElem(L, cur_e, &pre_e);
若cur_e是L的数据元素,且不是第一个,则用pre_e返回它的前驱,否则操作失败;pre_e无意义。
NextElem(L, cur_e, &next_e);
若cur_e是L的数据元素,且不是最后一个,则用next_e返回它的后继,否则操作失败,next_e无意义。
NextElem(L, cur_e, &next_e);
若cur_e是L的数据元素,且不是最后一个,则用next_e返回它的后继,否则操作失败,next_e无意义。