当前位置:网站首页 > 技术博客 > 正文

双向链表的构造方法

目前我们所学到的链表,无论是动态链表还是静态链表,表中各节点中都只包含一个指针(游标),且都统一指向直接后继节点,通常称这类链表为

单向链表

(或

单链表

)。



虽然使用单链表能 100% 解决逻辑关系为 "一对一" 数据的存储问题,但在解决某些特殊问题时,单链表并不是效率最优的存储结构。比如说,如果算法中需要大量地找某指定结点的前趋结点,使用单链表无疑是灾难性的,因为单链表更适合 "从前往后" 找,而 "从后往前" 找并不是它的强项。



为了能够高效率解决类似的问题,本节来学习

双向链表

(简称

双链表

)。



从名字上理解双向链表,即链表是 "双向" 的,如图 1 所示:


双向链表结构示意图
图 1 双向链表结构示意图

从图 1 中可以看到,双向链表中各节点包含以下 3 部分信息(如图 2 所示):

  1. 指针域:用于指向当前节点的直接前驱节点;
  2. 数据域:用于存储数据元素。
  3. 指针域:用于指向当前节点的直接后继节点;


双向链表的节点构成
图 2 双向链表的节点构成


因此,双链表的节点结构用 C 语言实现为:

同单链表相比,双链表仅是各节点多了一个用于指向直接前驱的指针域。因此,我们可以在单链表的基础轻松实现对双链表的创建。



需要注意的是,与单链表不同,双链表创建过程中,每创建一个新节点,都要与其前驱节点建立两次联系,分别是:

  • 将新节点的 prior 指针指向直接前驱节点;
  • 将直接前驱节点的 next 指针指向新节点;


这里给出创建双向链表的 C 语言实现代码:


我们可以尝试着在 main 函数中输出创建的双链表,C 语言代码如下:

程序运行结果:

版权声明


相关文章:

  • 光线和三角形求交2025-03-16 15:30:05
  • 面向对象系统分析与设计2025-03-16 15:30:05
  • vue3和vue2有什么区别2025-03-16 15:30:05
  • ldap服务端口2025-03-16 15:30:05
  • 指针网络科技有限公司2025-03-16 15:30:05
  • monkey测试的原理2025-03-16 15:30:05
  • 括号匹配的算法2025-03-16 15:30:05
  • rocketmq架构图2025-03-16 15:30:05
  • 结构体定义一个数组2025-03-16 15:30:05
  • c/c++循环队列2025-03-16 15:30:05