6 静态链表
6.1 基本概念
-
在一些没有指针的编程高级语言(比如Basic,Fortran)中,可以使用数组来代替指针,来描述单链表。
-
数组的元素都是由两个数据域组成,data和cur。游标cur相当于单链表中的next指针,存放该元素的后继在数组中的下标。
-
我们把这种用数组描述的链表叫做静态链表,或游标实现法。
-
存储结构
- -
数组第一个和最后一个元素作为特殊元素处理,不存数据。我们通常把未被使用的数组元素称为备用链表。
6.2 基本操作
插入,删除。
6.3 优缺点
优点:插入删除时,只需要修改游标,不需要移动元素,从而改进了在顺序存储结构中的插入和删除需要移动大量元素的缺点。
缺点:1)没有解决连续存储分配带来的表长难以确定的问题,2)失去了顺序存储结构随机存取的特性。
7 循环链表
7.1 基本概念
-
将单链表中终端结点的指针端由空指针改为指向头结点,就使整个单链表形成一个环,这种头尾相接的单链表称为单循环链表,简称为循环链表 (circular linked list)。
-
解决了一个问题:如何从当中一个结点出发,访问到链表的全部结点。
-
循环链表带有头结点的空链表图示
-
非空的循环链表
-
8 双向链表
8.1 基本概念
- **双向链表(double linked list)**是在单链表的每个结点中,再设置一个指向其前驱结点的指针域。
- 存储结构
- 双向链表的循环带头结点的空链表
- 非空的循环的带头节点的顺双向链表
8.2 操作
双向链表相比单向链表,多了反向遍历查找,代价是插入和删除时需要改变两个指针
8.2.1插入操作
插入节点s,先设置s的前驱和后继,再搞定后结点的前驱,最后解决前结点的后继。
代码
8.2.2 删除结点
主要两步:代码:
参考:《大话数据结构》