单向链表结构体节点中有一个指针,总是保存后面的那个节点地址,形成链式结构,但由于他只有一个指针,因此只能向一个方向移动
如果想要双向移动,就需要用到双向链表,其实就是用两个指针,一个指向前面的节点地址,一个指向后面的节点地址,这样就实现了双向移动,也就是双向链表
如图所示
双向链表代码虽然较单向链表复杂,但是由于能够双向移动,就省去了很多无用的遍历过程,效 率会更高一些
以有头双向链表为例,头文件中结构体具备以下内容
用两个结构体来实现双向链表的代码,链表长度也可以没有,这样写为了编写链表长度函数以及遍历链表是较为方便,当我们想要遍历找到某个位置的数时,可以判断它离头节点近还是尾结点近,然后减少遍历数据的数量,不过这不是必须的,双向链表的实现方法也不唯一,本质思想一致即可
双向链表如何进行插入删除:
就是要比单向链表多考虑一个p_pre指针的指向
编写其头文件,头文件中有我们要实现的函数声明 ,结构体声明
下面我们用代码去实现这些函数:
删除与插入的操作顺序判断遍历基本差不多,只是在删除和插入的这部分不同
写这些函数的时候基本思路基本是一致的,不要忘记判断,在增删函数时,要判断一下是否在最 后一个位置
那么再写一下测试函数
测试结果无问题
双向链表的代码实现方法不唯一,这是数据结构的一种思想