数据结构——循环链表

Posted sanwumanzi

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据结构——循环链表相关的知识,希望对你有一定的参考价值。

1、循环链表的定义
循环链表是一种首尾相连的链表。特点是无需增加存储量,仅对表的链接方式修改使表的处理灵活方便。空循环链表仅由一个自成循环的头结点表示。

2、单向循环链表

在单向链表中,头指针是相当重要的,因为单向链表的操作都需要头指针,所以如果头指针丢失或者破坏,那么整个链表都会遗失,并且浪费链表内存空间。
单向循环链表的构成:如果把单链表的最后一个节点的指针指向链表头部,而不是指向NULL,那么就构成了一个单向循环链表。

3、双向循环链表

在单链表L中,查找ai的后继 Next(L, ai),耗时仅为O(1),因为取ai之后继指针即可。但查找ai的直接前驱Prior(L, ai),则需从链表的头指针开始,找到结点ai前一结点即是。故运算Prior(L,ai)依赖表长n,耗时为O(n)。另外,若链表中有一指针值被破坏,则整个链表脱节。这是单链表的不足,为此,引入双向链表。先定义双向链表中的结点:技术图片其中,data和next同单链表,增加一指针域prior,其指向本结点的直接前驱。
结点描述:
typedef int data_t;
typedef struct dnode_t
{ data_tdata;
struct dnode_t *prior, *next;
}dlinknode_t, *dlinklist_t;

a、双向循环链表插入:即实现在表L的第i结点前插入一结点x的运算。
算法思路:调用查找算法Getlist(L,i),获取结点ai的指针p 。若p存在,申请一q结点,存入元素x,然后修改指针,将q结点插入p结点之前。

b、双向循环链表删除:即实现删除链表中第i结点的运算。
算法思路:调用查找算法GetlLinkist(L, i),获取ai的指针p,若p存在,则修改指针删除之。











以上是关于数据结构——循环链表的主要内容,如果未能解决你的问题,请参考以下文章

数据结构第五篇——线性表的链式存储之循环链表

数据结链表

数据结构——循环链表

数据结构——带头双向循环链表

数据结构开发:循环链表与双向链表

数据结构开发(11):双向循环链表的实现