【C语言】---双向链表的实现

一级标题双向链表和顺序表的优缺点

在这里插入图片描述

双向链表的结构

双向链表和单向链表的区别

这边博客介绍的是带头双向循环链表,以下是其结构,不同与单链表的是双链表不仅有指向下一个节点地址的指针next还有指向前一个节点地址的指针prev和"哨兵位”
在这里插入图片描述
单向链表
在这里插入图片描述

什么是“哨兵位”

“哨兵位”就是双向链表的头节点,这个节点和其余节点一样有指向下一个节点的next和直线前一个节点的prev,“哨兵位”初始化的时候next和prev都指向自己,从而形成循环。
在这里插入图片描述

为什么要设置哨兵位

拿下面这段代码举例子,这段代码是上篇博客的单链表尾插功能实现的代码,我们一开始将链表置为空,当我们第一次尾插的时候我们就要判断当前链表为不为空,为空的话我们就要把头节点指向这个节点。
如果我们设置了哨兵位,我们就不需要判断链表为不为空了,因为哨兵位就是一个节点,链表中至少都有哨兵位一个节点,我们直接进行尾插或者头插操作即可。
(注意:有哨兵位的话头插是插到哨兵位的后面)
在这里插入图片描述

双向链表的实现

和上篇博客一样,我只展示代码,想要更好理解看懂的话需要自己画图辅助理解记忆,好记性不如烂笔头,我们学的是逻辑,而不是死记硬背代码。
想要画图却不知道怎么画的话欢迎随时留言或者私信小编哦~

双向链表结构的定义

包括节点值,指向下一个节点地址的指针next和指向前一个节点地址的指针prev
在这里插入图片描述

要实现的功能和所需头文件

在这里插入图片描述
在这里插入图片描述

链表的初始化

初始化就是申请一个next指针和prev指针都指向自己的头节点(“哨兵位”)
在这里插入图片描述

链表的尾插

在这里插入图片描述
这里申请空间我们也将其写做一个函数,方便后续函数可以调用该函数来申请空间,具体代码如下:
在这里插入图片描述

链表的头插

在这里插入图片描述

链表的尾删

在这里插入图片描述

链表的头删

在这里插入图片描述

查找链表中的数据

在这里插入图片描述

在pos节点之后插入数据

这里我们不实现在pos节点之前插入数据,因为这个pos节点如果给的是哨兵位的话我就不符合我们设计的理念。
在这里插入图片描述

删除pos节点

在这里插入图片描述

打印链表

在这里插入图片描述

链表的销毁

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值