## 一.循环链表
当使用单链表进行遍历的时候,我们只能从头结点开始,尾结点结束,如果需要查看指针所指向结点的前面结点,我们又必须从头结点开始遍历。为了解决这个问题,我们便引入了双链表,使其能够双向遍历,但是它又引入了prior指针域,增加了额外的开销。为此,我们便又引入了循环链表。所谓循环链表简单来说就是表尾的指针域指向表头从而使整个链表形成了一个闭环。
### 1.1循环单链表
循环单链表和单链表的的区别在于,表中最后一个节点的指针域不是NULL,而是指向了头结点,从而使整个链表形成一个环,如图所示:
![循环单链表](https://box.kancloud.cn/2016-03-14_56e66947c8eda.jpg "")
在循环单链表中,表尾结点*r的next指针域指向头结点head,故表中没有指针域为NULL的结点。因此判断循环单链表是否为空的条件便是头结点的指针域是否指向自身。
循环单链表的插入,删除操作与单链表的基本操作一致,但是当在表尾结点处进行插入,删除操作时,必须注意不能使其断链。同时我们应注意到,一般情况下,我们对链表的操作大部分集中在表尾,如此,我们对循环单链表并不设置头指针,只设置一个尾指针,从而使得操作效率更高
### 1.2循环双链表
由循环单链表的定义我们很容易的便可以得到循环双链表,但与循环单链表不同的是循环双链表的尾结点的指针域next在指向头结点的同时, 头结点的prior指针域还必须指向尾结点。如图所示:
![循环双链表](https://box.kancloud.cn/2016-03-14_56e66947da0f8.jpg "")
循环双链表中,链表为空的条件为头结点的prior指针域和next指针域均指向自身节点。
## 二.静态链表
静态链表是借助数组来描述线性表的链式存储结构的,节点同样有数据域data和“指针域”next,但与前面所讲的指针不同的是,这里的“指针”是结点的相对地址(即数组下标),或称为游标。因此它与顺序表一样,使用时必须预先分配一块连续的内存空间。
静态链表和单链表的对应关系如下图所示:
![静态链表示例](https://box.kancloud.cn/2016-03-14_56e66947ed518.jpg "")
`(a). 静态链表示例`
![静态链接对应的单链表](https://box.kancloud.cn/2016-03-14_56e6694807f2f.jpg "")
`(b). 静态链接对应的单链表`
其数据结构描述如下:
~~~
#define MaxSize 50
typedef struct{
ElemType data;
int next;
}SLinkList[MaxSize];
~~~
静态链表以`next==-1`作为其结束的标识。静态链表的插入,删除操作与动态链表无异,只需修改“指针”便可。总的来说,静态链表没有单链表使用起来方便,但是在没有指针类型的高级程序设计语言(如Basic)中使用链表结构,却又不失为一种巧妙的设计方法。
- 前言
- 绪论
- 第1章线性表
- 第1章第1节 线性表的顺序表示
- 第1章第1节练习题1 删除最小值
- 第1章第1节练习题2 逆置顺序表
- 第1章第1节练习题3 删除指定元素
- 第1章第1节练习题4 有序表删除指定区间值
- 第1章第1节练习题5 无序表删除指定区间值
- 第1章第1节练习题6 删除重复值
- 第1章第1节练习题7 顺序表的归并
- 第1章第1节练习题8 顺序表循环移位
- 第1章第1节练习题9 查找指定值
- 第1章第1节练习题10 查找中位数
- 第1章第2节 线性表的链式表示(1)
- 第1章第2节 线性表的链式表示(2)
- 第1章第2节 线性表的链式表示(3)
- 第1章第2节练习题1 递归删除指定结点
- 第1章第2节练习题2 非递归删除指定结点
- 第1章第2节练习题3 删除最小值结点
- 第1章第2节练习题4 删除指定区间结点
- 第1章第2节练习题5 删除重复结点
- 第1章第2节练习题6 反向输出
- 第1章第2节练习题7 递减输出
- 第1章第2节练习题8 奇偶拆分单链表
- 第1章第2节练习题9 查找公共结点
- 第1章第2节练习题10 查找指定倒数结点
- 第1章第2节练习题11 就地逆置单链表
- 第1章第2节练习题12 单链表之插入排序
- 第1章第2节练习题13 单链表之选择排序
- 第1章第2节练习题14 判断子序列
- 第1章第2节练习题15 拆分并逆序单链表
- 第1章第2节练习题16 归并并逆序单链表
- 第1章第2节练习题17 使用相同值结形成新单链表
- 第1章第2节练习题18 求两个单链表的交集
- 第1章第2节练习题19 判断循环双链表对称
- 第1章第2节练习题20 连接两个循环单链表
- 第1章第2节练习题21 输出并删除最小值结点
- 第1章第2节练习题22 按结点访问频度排序
- 第1章第3节 线性表的比较
- 第2章受限的线性表
- 第2章第1节 栈
- 第2章第1节练习题1 判断栈的操作次序是否合法
- 第2章第1节练习题2 判断是否中心对称
- 第2章第2节 队列
- 第2章第1节练习题3 共享栈的基本操作
- 第2章第2节练习题1 逆置队列
- 第2章第2节练习题2 使用栈模拟队列操作
- 第2章第2节练习题3 使用队列模拟渡口管理
- 第2章第3节 串
- 第2章第3节练习题1 串的模式匹配(Basic)
- 第2章第3节练习题2 串的模式匹配(KMP)