知识大全 线性表- 链式存储结构- 循环链表
Posted 结点
篇首语:如烟往事俱忘却,心底无私天地宽。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 线性表- 链式存储结构- 循环链表相关的知识,希望对你有一定的参考价值。
循环链表(Circular Linked List)
循环链表是一种首尾相接的链表
循环链表
( )单循环链表 ——在单链表中 将终端结点的指针域NULL改为指向表头结点或开始结点即可
( )多重链的循环链表 ——将表中结点链在多个环上
>
带头结点的单循环链表
>
注意
判断空链表的条件是head==head >next;
仅设尾指针的单循环链表
用尾指针rear表示的单循环链表对开始结点a 和终端结点a n 查找时间都是O( ) 而表的操作常常是在表的首尾位置上进行 因此 实用中多采用尾指针表示单循环链表 带尾指针的单循环链表可见下图
>
注意
判断空链表的条件为rear==rear >next;
循环链表的特点
循环链表的特点是无须增加存储量 仅对表的链接方式稍作改变 即可使得表处理更加方便灵活
【例】在链表上实现将两个线性表(a a … a n )和(b b … b m )连接成一个线性表(a … a n b …b m )的运算
分析 若在单链表或头指针表示的单循环表上做这种链接操作 都需要遍历第一个链表 找到结点a n 然后将结点b 链到a n的后面 其执行时间是O(n) 若在尾指针表示的单循环链表上实现 则只需修改指针 无须遍历 其执行时间是O( )
>
相应的算法如下
LinkList Connect(LinkList A LinkList B)
//假设A B为非空循环链表的尾指针
LinkList p=A >next;//①保存A表的头结点位置
A >next=B >next >next;//②B表的开始结点链接到A表尾
free(B >next);//③释放B表的头结点
B >next=p;//④
return B;//返回新循环链表的尾指针
注意
①循环链表中没有NULL指针 涉及遍历操作时 其终止条件就不再是像非循环链表那样判别p或p >next是否为空 而是判别它们是否等于某一指定指针 如头指针或尾指针等
②在单链表中 从一已知结点出发 只能访问到该结点及其后续结点 无法找到该结点之前的其它结点 而在单循环链表中 从任一结点出发都可访问到表中所有结点 这一优点使某些运算在单循环链表上易于实现
cha138/Article/program/sjjg/201311/23305相关参考