2.1 线性表的链式存储
单链表:链表中的每个节点只有一个指针域
单链表包括两个域,数据域和指针域。数据域用来存储节点的数据值,指针域用来存储数据元素的值,接后继的地址。
单链表的基本运算
1)建立单链表
2)单链表查找
3)单链表插入
4)单链表删除
5)求单链表的长度
单链表的插入
第i个元素之前插入数据元素e,首先找到第i-1个节点并由指针pre指示,然后申请一个新的节点并由s指示,其数据值为e,修改i-1节点的指针,使其指向s,然后使s得指针域指向第i个节点。不能改变顺序,先后后前。
单链表的删除
删除第i个节点,首先找到第i-1 个节点并使pre指向第i-1个节点,并使得pre指向第i-1个,而后通过删除第i个节点释放节点空间。
2.2 循环链表
将单链表最后一个节点的指针域指向头结点或者线性表中的第一个节点,就得到了单恋形式的循环链表。在循环单链表中,表中所有节点都在一个环上。
不带尾指针,复杂度为O(n),采用带尾指针的循环链表,复杂度为O(1)
循环链表特点:
1.从表中任一节点触发都能访问到表中所有节点。
2.循环表是对称的,为了判断起始位置,一般要设置头结点。头结点的位置也可将空表和非空表的逻辑状态及运算统一起来。
3.循环表的运算和线性链表基本一致,有时可简化某些运算。
2.3 双向链表
在单链表的节点里再增加一个向其前趋的指针prior,形成的链表中有两条方向不同的链,称之为双向链表。
双向链表的前插操作:
双向链表的删除操作:
2.4 顺序表和链表的比较
顺序存储的优点:
1)用数组存储数据元素,操作简单,容易实现
2)无需因为节点之间的逻辑关系而增加额外的存储开销
3)存储密度高
4)顺序表可以按照元素位序随机存储节点。
顺序存储的缺点:
1)做插入,删除操作时,需要大量移动数据,效率低。
2)要占用连续的存储空间,存储分配只能预先进行。如果估计过大,可能导致后部大量空间限制,如果预先分配过小,又会造成数据溢出。