DataStructure part2 线性表
1、基本概念
线性表(List):零个或多个数据元素的有限序列。记为(a1,···,ai-1,ai,ai+1,···,an)
线性表抽象数据类型定义如下:
2、线性表的顺序存储结构
可用一维数组实现,如下:
1)插入操作
2)删除操作
3)顺序存储结构优缺点
优点:快速读取表中任一位置的元素
缺点:插入和删除需要移动大量元素、当线性表长度变化大时难以确定存储空间容量、造成存储空间碎片。
3、线性表的链式存储结构
1)结点:数据域和指针域。
头结点:数据域可为空,指针域为空时,则为空链表。
头指针:指向头结点的指针
2)获取单链表第i个结点
3)单链表插入结点
4)单链表删除结点
5)单链表头插法建立链表
6)单链表尾插法建立链表
7)清空单链表
4、静态链表:用数组描述链表(游标实现法)
1)初始状态(空表):
2)插入操作
i)首先将头结点游标加一(由7到8),并且得到第一个空闲游标的位子(新元素的预定位子),函数如下:
ii)插入到尾部,只需改变要游标。(若丙想插入到乙后面,该乙的游标为7,丙的游标为3就够了)
3)删除操作
i)改末项的游标值(删除甲,则末项的游标由1变为2)
ii)回收结点并修改该空闲结点为优先插入位子,并修改头结点cursor
如图:
4)得到静态链表长度
5)静态链表优缺点
优点:插入删除时,较顺序表不用移动结点
缺点:没有解决连续存储分配带来的表长难以确定问题、失去了顺序存储结构随机存取的特性
5、循环链表
1)基本概念
将单链表的终端结点的指针域指向头结点,形成环,这种头尾相接的单链表称为单循环链表,简称循环链表。
尾指针:指向终端结点rear。
具体操作于单链表差不多,通过判断是否为头结点时判断链表结束。
6、双向链表
双向链表是在单链表的每个结点中在设置一个指向其前驱结点的指针域。
定义如下:
7、总结