- 线性表
- 定义:n个数据元素的有限序列
- 线性表的抽象数据类型
ADT List {
D = {a[i] | a[i] is ElemSet, i = [0, n], n >= 0}
R = { <a[i-1], a[i]> | a[i-1],a[i] in D, i = [1, n]} //前驱关系
P
InitList(&L)
DestyoyList(&L)
ClearList(L)
ListEmpty(L)
ListLength(L)
GetElem(L, i, &e)
LocateElem(L, e, compare())
PriorElem(L, cur_e, &pre_e)
NextElem(L, cur_e, &next_e)
ListInsert(&L, i, e)
ListDelete(&L, i, &e)
ListTraverse(L, visit())
}ADT List
- 线性表的顺序存储结构
- 通过数组方式实现线性表, 存取的复杂度为O(1),但是插入和删除的复杂度为O(n)
- 数组长度难以确定、容易造成空间碎片
- 适用于少修改,多查询的情况
- 线性表的链式存储结构
- 通过链表方式实现线性表, 存取复杂度为O(n), 在已知前驱位置的情况下插入和删除复杂度为O(1)
- 适用于多次修改或者容量未知的情况
- 头指针和头节点
- 头指针:一定是指向线性表的第一个节点(可为空,必须有)
- 头节点:为了操作数据的便利可以添加头节点,数据域无意义(可以存储长度或自定义)(非必要元素)
- 静态链表:通过数组来实现链表
- 循环链表:尾结点指向头结点的链表(可以在O(1)时间类找到尾部和头部)
- 双向链表:每个结点有2个指针域直线前驱和后继的链表
- 线性表的实现
源码参考:https://www.cnblogs.com/qq188380780/p/7482390.html