0个或者多个数据元素的有限集合
元素之间是有顺序的,元素个数有限
//ADT List:线性表的抽象数据类型定义
Data
有限个数据元素
Operation:
InitList();//初始化操作,建立一个空的线性表
ListEmpty();//判断线性表是否为空
ClearList();//清空线性表
GetElem(int i);//获取第i个元素
LocateElem(Elem);//在线性表中查找定制Elem的位置,找到了返回true
ListInsert(i,Elem);//在线性表中第i个位置插入新元素Elem
ListDelete(i);//删除线性表第i个元素
ListLength();//返回线性表中元素的个数
线性表的顺序存储结构
优点
- 无需为表中元素之间的逻辑关系而增加额外的存储空间。
- 可以快速存取表中任一位置的元素
缺点
- 插入和删除操作需要移动大量的元素
- 当线性表的长度变化较大时,难以确定存储空间的容量。
- 容易造成存储空间的碎片,造成存储资源的浪费
线性表的链式存储结构
顺序存储结构 | 单链表 | |
---|---|---|
存储分配方式 | 顺序存储结构用一段连续的存储单元依次存储线性表的数据元素 | 单链表采用链表存储结构,用一组任意的存储单元存放线性表的元素 |
时间性能 | 查找性能O(1) 插入和删除:平均移动表长一半的元素,时间复杂度为O(n) | 查找性能O(n) 插入和删除:O(1) |
空间性能 | 需要预先分配存储空间,大小不容易判断 | 不需要分配存储空间,没有个数限制。 |
若线性表需要频繁查找,很少进行插入和删除,采用顺序存储结构比较合适。
若频繁删除和插入,少查找,采用单链表存储结构比较合适。
事先不知道元素的个数,最好使用单链表结构。反之,可以使用顺序存储结构。
静态链表:用数组描述的链表
静态链表的优缺点
优点:在插入和删除操作时,只需要修改游标,不需要移动元素
缺点:没有解决连续存储分配带来的表长难以缺点的问题。失去了顺序存储结构随机存取的特性。
循环链表
头指针指向最后一个节点或者尾指针指向第一个节点
双向链表
每个节点前指针指向前驱,后指针指向后继。