循环双链表的实现

一、循环双链表的概念

        循环双链表的定义

二、循环双链表的基本操作

        双链表的初始化

        头插

        尾插

        头删

        尾删

        查找

        双链表的销毁

三、循环双链表的代码呈现

        函数定义

        函数调用

        函数实现

四、总结

一、循环双链表的概念

1.循环双链表的定义

双链表由一个个的节点组成,节点有三个组成部分:指向前面的pre指针、值和指向后面的next指针.双链表需要创建一个影子节点,这个节点不存储任何的有效元素。

二、循环双链表的基本操作


1.循环双链表的初始化

由于实现循环链表需要创建一个影子节点他的pre和next指针都指向自己

2.尾插

先检查节点是否存在,存在往下走;调用创建节点函数,该函数malloc空间返回该节点;如果链表中没有节点影子节点的pre指针和next指针都指向新节点,而新节点的next和pre也指向该影子节点。如果链表中存在节点,则通过影子节点的pre指针找到尾节点,先将其尾节点的next指针指向新节点,而新节点的pre执政指向该尾节点,新节点的next指针指向影子节点,影子节点的pre指向新节点。尾插完成。和单链表完全不一样,循环双链表的尾插时间复杂度只需要O(1),而单链表则需要O(N)。

3.头插

判断指针本身是否存在,调用创建函数,判断该链表的next指针是否指向自己,如果指向自己,则将其next和pre两个指针指向newnode,newnode的next和pre则指向该节点;如果该链表中没有指向自己,则证明该链表不是空链表,先将影子节点的下一个节点的pre指针指向新节点,新节点的next指针指向他,然后在将新节点的pre指针指向影子节点,影子节点的next指针指向新节点。头插完成。

4.头删

判断其是否满足头删条件:指针本身是否为空和链表内元素是否只存在影子节点,满足则直接跳出。不满足往下执行,先将影子节点后的节点单独放在一个变量中,取找该节点的下一个节点的prev指针指向影子节点,影子节点指向node的下一个节点。头删完成。

5.尾删

判断其是否满足尾删条件:指针本身是否为空和链表内元素是否只存在影子节点,满足则直接跳出。不满足往下执行。去找影子节点的前一个结点用node定义,然后取找node前一个结点的next指针,指向影子结点,影子结点的pre指针指向node的前一个结点。

6.查找

先判断该链表中是否能够查询有两个条件,指针是否为NULL,结点的next是否指向自己。定义一个变量去遍历该链表。如果找到了与x相同的值直接返回该结点,遍历结束还没找到,则返回NULL。

7.销毁

利用一个pcur值放入影子结点的后一个结点,跑到影子结点出遍历结束,在遍历中,把pcur的下一个结点放入next内,释放pcur,将next的值放入pcur内,释放完成后,将原来的指针释放,最后置为NULL。

三、循环双链表的代码呈现

1.函数定义

2.函数调用

3.函数实现

四、总结

这是笔者有关于双循环链表的基本操作与代码实现,希望对读者学习循环链表有个初步的认识。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值