定义

双向链表也叫双链表,是链表的一种,它的每个数据结点中都有两个指针,分别指向直接后继和直接前驱。所以,从双向链表中的任意一个结点开始,都可以很方便地访问它的前驱结点和后继结点。一般我们都构造双向循环链表(解决了单链表只能从头结点依次访问顺序向后遍历的问题)
双链表中结点的类型表述如下:

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

双链表的逻辑结构图:

双链表上基本操作

1、插入操作
在双链表中p所指结点之前插入结点*s,其指针变化如下图:

插入操作的代码片段如下:

s->next = p->next;            //将结点*s插入到结点*p之后
p->next->prior = s;
s->prior = p;
p->next = s;

【注】上述代码的语句顺序不唯一,但也不是任意的;如第一,二句必须在第四句之前。
2、删除操作
删除双链表中结点*p,其指针的变化过程如下图:

删除操作的片段代码如下:

p->next = q;
q->next =->prior = p;
free(q);                        //释放结点空间

【注】a为p结点,b为q结点

线性表的链式表示——双链表相关推荐

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

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

  2. 线性表的链式表示——单链表

    单链表 定义 线性表的链式存储又称单链表,它是指通过一组任意的存储单元来存储线性表中的数据元素.每个链表的结点,除存放元素自身的信息之外,还需要存放一个指向其后继结点的指针.即单链表的结构分为两部分, ...

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

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

  4. 数据结构与算法笔记(三) 线性表(链式描述) 链表

    在链式描述中,线性表元素的位置在内存中是随机的,每个元素都有一个明确的指针指向线性表的下一个元素的位置. 1.单向链表: 数据对象的每一个元素都用一个单元或者节点来描述,每个节点都明确包含另一个相关节 ...

  5. 线性表的链式实现(单链表)

    单链表的定义 为了表示每个数据元素与其直接后续元素之间的逻辑关系,每个元素除了存储本身的信息外,还需要存储指示其直接后续的信息,即每个结点存放本身的数据元素和下一个元素的地址.n个结点连接成一个链式线 ...

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

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

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

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

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

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

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

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

最新文章

  1. jquery $.each()函数编程实例五则图解
  2. 2.3.11 管程
  3. C语言函数参数既做出参又做入参的代表
  4. java 批量验证_正则表达式批量验证函数
  5. python 计算小于某个数_python 列表寻找满足某个条件的开始索引和结束索引、区间范围...
  6. threadgroup_Java ThreadGroup类的checkAccess()方法和示例
  7. android 双系统 一加5,[一加2][双ROM]一加手机2安装双系统教程
  8. Python结合selenium自动领取无忧币的脚本
  9. 【Spark】SparkSQL练习--出租车数据清洗
  10. Interfaces for Music音乐界面——翻译
  11. SQL SERVER中WITH TIES的用法
  12. 美团笔试(测试开发)
  13. MOS管推挽电路设计及特性解析
  14. 魔兽名字显示服务器,魔兽世界怀旧服服务器名称
  15. imchat视频聊天室 linux,基于Nuxt+Vant聊天模板|nuxt.js仿微信界面|红包|朋友圈
  16. 斯嘉丽约翰逊60张pdf什么时间的?_什么叫美丽与演技并存?
  17. 挑出区域内每一行最小值,并标记颜色
  18. 英语不好,能学好计算机吗?
  19. 点云学习笔记19——使用pcl将bin文件转化为pcd文件
  20. MyBatis官方文档-XML 映射文件

热门文章

  1. 浅谈Laravel中的设计模式(四) Contract 契约模式
  2. 充分的总结分析系统,来调整CMDB及流程。
  3. C++用数组和链表分别实现Stack
  4. 也许开发需要的只是一份简单明了的表格
  5. GPIO 输入—按键检测
  6. Could not initialize class sun.awt.X11GraphicsEnvironment
  7. /proc/mtd 各参数的含义 -- linux内核
  8. Linq之Expression高级篇(常用表达式类型)
  9. 手杀***病毒Trojan.Win32.Generic.11EBD5EC
  10. ESFramework网络通信框架介绍之(2)――网络通信消息NetMessage