知识大全 线性表- 链式存储结构- 循环链表
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相关参考
第九课本课主题循环链表与双向链表教学目的掌握循环链表的概念掌握双向链表的的表示与实现教学重点双向链表的表示与实现教学难点双向链表的存储表示授课内容一复习线性链表的存储结构二循环链表的存储结构循环链表是
单链表 链接存储方法 链接方式存储的线性表简称为链表(LinkedList) 链表的具体存储表示为 ①用一组任意的存储单元来存放线性表的结点(这组存储单元既可以是连续的也可以是不连续的)
双向链表(DoubleLinkedList) 双(向)链表中有两条方向不同的链即每个结点中除next域存放后继结点地址外还增加一个指向其直接前趋的指针域 prior > 注意 ①双链表由
循环链表不是线性表( )【南京理工大学二(分)】 线性表只能用顺序存储结构实现( )【青岛大学四(分)】 线性表就是顺序存储
作为线性表的一种存储结构我们关心的是结点间的逻辑结构(线性关系)而对每个结点的实际地址并不关心所以通常的单链表用图的形式表示 > >
单链表的运算 建立单链表 假设线性表中结点的数据类型是字符我们逐个输入这些字符型的结点并以换行符\\n为输入条件结束标志符动态地建立单链表 的常用方法有如下两种 ()头插法建表 ①算法思
顺序表的存贮特点是利用物理上的相邻关系表达出逻辑上的前驱和后继关系它要求用连续的存储单元顺序存储线性表中各元素因此对顺序表进行插入和删除时需要通过移动数据元素来实现线性表的逻辑上的相邻关系从而影响
单链表的查找运算 ()按序号查找 ①链表不是随机存取结构 在链表中即使知道被访问结点的序号i也不能像顺序表中那样直接按序号i访问结点而只能从链表的头指针出发顺链域 next逐个结点往下搜索
插入运算 ()思想方法 插入运算是将值为x的新结点插入到表的第i个结点的位置上即插入到ai与ai之间 具体步骤 ()找到ai存储位置p ()生成一个数据域为x的新结点*s ()令结点*
()尾插法建表 ①算法思路 从一个空表开始重复读入数据生成新结点将读入数据存放在新结点的数据域中然后将新结点插入到当前链表的表尾上直到读入结束标志为止 > 具体方法【参见动画演示】 注意