C语言数据结构----双向链表

单向链表结构体节点中有一个指针,总是保存后面的那个节点地址,形成链式结构,但由于他只有一个指针,因此只能向一个方向移动

如果想要双向移动,就需要用到双向链表,其实就是用两个指针,一个指向前面的节点地址,一个指向后面的节点地址,这样就实现了双向移动,也就是双向链表

如图所示

 双向链表代码虽然较单向链表复杂,但是由于能够双向移动,就省去了很多无用的遍历过程,效   率会更高一些

以有头双向链表为例,头文件中结构体具备以下内容

用两个结构体来实现双向链表的代码,链表长度也可以没有,这样写为了编写链表长度函数以及遍历链表是较为方便,当我们想要遍历找到某个位置的数时,可以判断它离头节点近还是尾结点近,然后减少遍历数据的数量,不过这不是必须的,双向链表的实现方法也不唯一,本质思想一致即可

双向链表如何进行插入删除:

 就是要比单向链表多考虑一个p_pre指针的指向

编写其头文件,头文件中有我们要实现的函数声明 ,结构体声明

下面我们用代码去实现这些函数:

 

删除与插入的操作顺序判断遍历基本差不多,只是在删除和插入的这部分不同

 

 

 

 写这些函数的时候基本思路基本是一致的,不要忘记判断,在增删函数时,要判断一下是否在最   后一个位置

那么再写一下测试函数

 

 测试结果无问题

 双向链表的代码实现方法不唯一,这是数据结构的一种思想

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值