如何实现双向链表的插入、删除操作

循环单链表的出现,虽然能够实现从任一结点出发沿着链能找到其前驱结点,但是时间复杂度为O(N)。如果希望能从链表中快速确定某一个结点的前驱,另一个解决方法就是在单链表的每一个结点再增加一个指向其前驱的指针ptr。这样形成的链表中就有两条方向不同的链,被称为双向链表(Double Link List),简称双链表。它是由头指针head唯一确定的。带头结点的双链表的某些运算变得方便。将头结点和尾结点链接起来,为双循环链表。

带头结点的双链表结构如下图所示:

双链表的形式描述:

Typedef struct dlistnode

{

DataType data;

struct dlistnode *prior,*next;

}DListNode;

typedef DListNode *DLinkList;

DLinkList head;

由于双链表的对称性,在双链表中能方便地完成各种插入、删除操作。

在双向链表的结点p之后插入一个新的结点s:

void DInsert()

{

//假设p!= NULL

DListNode *s = malloc(sizeof(DListNode));

s->next = p->next;

s->prior = p;

p->next = s;

s->next->prior = s;

}

双链表上删除结点p的后一个结点q的操作为:

void DDeleteNode()

{

q= p->next;

p->next= q->next;

q->next->prior= p;

free(q);

}

如何实现双向链表的插入、删除操作相关推荐

  1. 顺序表和单链表的插入删除操作时间复杂度的区别

    顺序表和单链表的插入删除操作时间复杂度的区别 最近在学习数据结构,看到如果需要用到大量的插入和删除操作,单链表的效率会高于顺序表.看到这里时内有有个疑惑,这两种数据结构的插入和删除操作的时间复杂度不都 ...

  2. mysql 插入删除操作_MySQL——增删改操作

    插入语句 一次插入操作只插入一行数据 insert into [tablename](listname1,listname2,......) values (value1,value2,......) ...

  3. 数据结构-----AVL树的插入删除操作

    对于AVL的插入和删除,主要利用的就是上篇文章所述的四种旋转操作,根据插入后不同的结构选用不同的方式复原平衡. 再次声明一下,http://www.cnblogs.com/QG-whz/p/51672 ...

  4. 浅析B树、B+树插入删除操作(附代码实现)

    首先自平衡树是为了解决二叉搜索树在有序数据中退化为链表的问题(即查找时间退化为 O(n) 级别). 自平衡树中,B树.B+树可以说是最简单的,没有旋转.变色等操作.我们可以拿多路平衡查找树和同样是自平 ...

  5. (图解)循环队列的三种判断队空、队满操作(附带源码和插入删除操作等一些基本操作)

    目录 一.普通的顺序存储队列 二.循环队列 (1)少用一个元素空间 i.初始化队列操作: iii.入队操作: iv.出队操作: (2)设置flag标志 i.初始化队列操作: ii.判断队空操作: ii ...

  6. 详细介绍红黑树 性质 定义 插入删除操作

    红黑树 定义 节点是红色或黑色 根结点一定是黑色 所有叶子节点都是黑色(指的是null) 每个红色节点的两个子节点都是黑色(从每个叶子到根的所有路径上不能有两个连续的红色节点) 从任意节点到其每个叶子 ...

  7. 链栈常规插入删除操作

    #include <stdio.h> #include <stdlib.h> typedef int DataType; struct Node {DataType data; ...

  8. 快速了解B+树的插入、删除操作

    B+树非常的复杂,这里不进行详细的讲解,只对基本的插入删除操作进行说明. 在B+树中,所有记录节点都是按键值的大小顺序存放在同一层的叶节点中,各叶节点用指针连接.因此在进行插入删除操作时,要进行调整, ...

  9. (C语言版)链表(三)——实现双向链表创建、删除、插入、释放内存等简单操作

    http://blog.csdn.net/fisherwan/article/details/19760681 上午写了下单向循环链表的程序,今天下午我把双向链表的程序写完了.其实双向链表和单向链表也 ...

最新文章

  1. LPCRITICAL_SECTION 函数
  2. android-menudrawer 和SlidingMenu 用法
  3. 用python实现复选框树_如何使用Python中的复选框创建树视图
  4. Servlet基本概念及执行流程
  5. BLE工作模式: Central+Peripheral(Advertising+Connected)
  6. CodeForces - 1208E Let Them Slide(模拟+multiset)
  7. 光纤收发器的选购原则介绍
  8. CASIO 5800P计算器游戏--猜数字游戏
  9. 上游供应链厂商确认高通已获准向华为出售4G芯片
  10. ios 从assets加载图片_iOS 使用Assets.xcassets添加启动图和Icon
  11. 从程序员角度--解决ipad白苹果问题的最佳办法---纠正网上的错误言论
  12. fn_dblog_如何使用fn_dblog和fn_dump_dblog直接在SQL Server数据库中连续读取事务日志文件数据
  13. 剑指Offer——把字符串转换成整数
  14. EntityFramework之DetectChanges's Secrets(三)(我为EF正名)
  15. 转 Git-fatal: unable to access 'xxx' : Could not resolve host: xxx
  16. 抢小米脚本 java,java写自动抢小米手机程序
  17. 2020年中国电子商务服务行业现状及发展趋势分析,行业集中度将不断提升「图」
  18. Python中函数的说明与注释
  19. thinkphp5.0的查询方法 where in 性能问题以及优化措施
  20. 用python写一个PDF翻译软件

热门文章

  1. 【历史上的今天】3 月 22 日:iPod 之父出生;奔腾处理器正式出货;激光的第一项专利
  2. 设备调试---用万用表寻找GND、RXD、TXD
  3. 基于stm32+LM2904+esp8266的噪声预警系统(续集)
  4. LCD液晶屏接口和显示器接口介绍
  5. javascript第二天课程
  6. 你的眼睛应该是灰色的,像钢铁一般的颜色
  7. 第一章 计算机网络和因特网
  8. MFC/C++调用易语言的整数型+文本型与VS2010互动
  9. 最老程序员创业札记:全文检索、数据挖掘、推荐引擎应用43
  10. 学会思考(转一位辩友的书单)