引言

单链表结点中只有一个指向其后继的指针,这使得单链表只能从头结点依次顺序地向后遍历。若要访问某个结点的前驱结点(插入、删除操作时),只能从头开始遍历 ,访问后继结点的时间复杂度为 0(1),访问前驱结点的时间复杂度为 O(n)。

为了克服单链表的上述缺点,引入了双链表,双链表结点中有两个指针 prior 和 next, 分别
指向其前驱结点和后继结点。如下图:

双链表的结点结构体

typedef struct DNode{            //定义单链表结点类型
ElemType data;                  //数据域
struct DNode *prior,*next;      //前驱和后继指针
}DNode, *DLinkList;

双链表的操作

1.插入(方式不唯一)

① s->next=p->next;
② p->next->prior=s;
③ s->prior=p;
④ p->next=s;

注意:顺序不唯一,可自行分析。但不能过早执行④ ,如果过早修改p的后继,就会丢失a3,就无法建立a3和a5的关系

2.删除

① p->next=q->next;
② q->next->prior=p;
③ free(q);

双向链表的特点是节点可以可以轻易的访问当前元素的前节点或后节点,相对单向链表每个节点多了一个前指针,因此相对要多一些空间的开销。用空间换时间。

参考资料

王道数据结构

【数据结构】线性表的链式存储-双链表相关推荐

  1. 数据结构-线性表(链式存储结构)

    线性表(链式存储结构) 特点: 用一组任意的存储单元存储线性表的数据结构,这组存储单元可以是连续的,也可以是不连续的. 对数据结构ai来说,除了存储其本身的信息之外,还需存储一个指示其后继的信息(即直 ...

  2. 数据结构-线性表的链式存储(包含代码实现)

    线性表的链式表示和实现 链式存储结构 结点在存储器中的位置是任意的,即逻辑上相邻的数据元素在物理上不一定相邻 线性表的链式存储结构又称为非顺序映像或链式映像. 用一组物理位置任意的存储单元来存放线性表 ...

  3. JAVA数据结构 线性表的链式存储及其实现

    2019独角兽企业重金招聘Python工程师标准>>> 2线性表的链式存储及其实现 虽然顺序表具有随机存取的特点是一种有用的存储结构但是也有缺陷: (1)      若需要给顺序表增 ...

  4. 【数据结构】线性表的链式存储-单链表

    单链表的定义 线性表的链式存储又称为单链表,它是指通过一组任意的存储单元来存储线性表中的数据元素. 为了建立起数据元素之间的线性关系,对每个链表结点,除了存放元素自身的信息之外,还需要存放一个指向其后 ...

  5. 用Java描述数据结构之线性表的链式存储(链表),模拟LinkedList实现

    上一篇介绍了顺序表:用Java描述数据结构之线性表的顺序存储(顺序表),ArrayList及其方法的介绍 上一篇博客中说明了什么是线性表--线性表就是一个个数据元素逻辑上以一对一的相邻关系(但是在物理 ...

  6. 线性表的链式表示——双链表

    定义 双向链表也叫双链表,是链表的一种,它的每个数据结点中都有两个指针,分别指向直接后继和直接前驱.所以,从双向链表中的任意一个结点开始,都可以很方便地访问它的前驱结点和后继结点.一般我们都构造双向循 ...

  7. 线性表的链式存储-单链表

    单链表操作 [x] 单链表的创建(尾插法.头插法) [x] 单链表的查找操作 [x] 单链表的删除操作 [x] 单链表的逆置操作(使用头插法) [x] 单链表表长的计算 [x] 打印单链表 单链表的创 ...

  8. 数据结构(四) -- C语言版 -- 线性表的链式存储 - 循环链表

    文章目录 零.读前说明 一.循环链表的概述 二.循环链表的模型 2.1.包含头节点模型 2.2.不包含头节点模型 三.工程结构及简单测试案例 3.1.测试工程的目录结构 3.2.循环链表示例源码 3. ...

  9. 什么是线性表?什么是线性表的顺序存储结构?什么是线性表的链式存储结构?

    1.线性表是最简单也是最常用的一种数据结构.线性表的例子不胜枚举,例如,英文字母表就是一个线性表,表中的英文字母是一个数据元素. 2.线性表的定义:线性表是具有相同特性的数据元素的一个有限序列. 3. ...

最新文章

  1. mongodb 入门
  2. App混合应用Appium自动化测试框架技术难点
  3. Anton and Fairy Tale CodeForces - 785C(二分+思维)
  4. 三、mongodb数据库系列——mongodb和python交互 总结
  5. websocket连接mysql_websocket 使用 spring 的service层 ,进而调用里面的 dao层 来操作数据库 ,包括redis、mysql等通用...
  6. UVa 12657 双向链表
  7. java 秒杀 源码 下载_java高并发秒杀系统3-4节秒杀功能实现.mp4
  8. 计算机国三网络技术,计算机国三网络技术.doc
  9. 为什么专家都看好这本书
  10. Scala Case Class
  11. 1、RabbitMQ初探
  12. 使用 SOUI 开发高 DPI 桌面应用程序
  13. 基于RSSI及KNN算法的WiFi室内定位实现
  14. kali安装python3.8_kali2019.4试用记录
  15. 数字图像处理基础笔记
  16. matlab求解常微分方程的实验,实验五__用matlab求解常微分方程
  17. P/O矩阵、R/D矩阵、IPO图、C/U矩阵知识点
  18. NMAKE参考之二——运行NMAKE
  19. 币圈小白必读的6本加密货币书籍
  20. node14 升级 node16 后 vue2 项目中 sass 报错问题

热门文章

  1. Redis中的I/O 多路复用(I/O Multiplexing)
  2. Concurrent集合 Atomic类
  3. java 带点的字符串处理,关于android:java中字符串上带点的分割函数
  4. 解决Tomcat下IntelliJ IDEA报错java.lang.NoClassDefFoundError: javax/servlet/ServletContextListener
  5. 21.5.8阶段四数据类型
  6. 210221阶段三线程、信号量、互斥锁
  7. 洛谷P2426 删数
  8. Oracle12cR2的CDB与PDB简单管理操作
  9. Android--批量插入数据到SQLite数据库
  10. 2017年第1贴:EXT.JS使用MVC模式时,注意如何协调MODEL, STORE,VIEW,CONTROLLER的关系