双链表

双链表的意义

单链表相对于顺序表,确实在某些场景下解决了一些重要的问题,例如在需要插入或者删除大量元素的时候,它并不需要像顺序表一样移动很多元素,只需要修改指针的指向就可以了,其时间复杂度为 O(1) 但是这可是有前提的,那就是这一切都基于确定节点后,纯粹考虑删除和插入的情况下,但是如果我们仍未确定节点的位置,那么单链表就会出现一些问题了,例如我们来看一下删除这个操作

删除操作

单链表:

对应图中的节点,想要删除第2个节点 a1 只需要 将首元结点的指针指向到第三个节点的地址去

但是问题就在于我们如何得到待删除节点的前驱,也就是我们图中的首元结点,我们给出两种方法

  • A:定位待删除节点的同时,一直顺便保存当前节点的前驱
  • B:删除节点后,重新回到单链表表头,定位到其指定前驱

但是无论我们选择哪一种方法,指针的总移动数都会是 2n 次,而双链表却在这一类型问题上做出了很好的处理

双链表:

单链表中之所以出现问题,就是因为各个节点只有一个指向后继的指针域 next,只能向后移动查找,一旦我们想要查询前一节点,就变得很麻烦,所以双链表就在每个节点前面增加一个指向前驱的指针域 prior,这样我们就可以直接定位到我们的前一个节点了,这也就是双链表

注意:为了统一运算,避免特殊情况的出现,我们也常常在尾部设置一个 “尾部头结点” 其 next 指针域为空

线性表的抽象数据类型定义

我们在给出双链表的定义之前我们还是需要先引入我们线性表的抽象数据类型定义

#ifndef _LIST_H_

双链表类型的定义

#ifndef _SEQLIST_H_

双链表基本运算的实现

(一) 构造与析构函数

template 

(二) 查找位序为i的节点的地址

template 

(三) 查找值为value的节点的位序

template 

(四) 插入元素

template 

(五) 删除位序为i的节点

template 

(六) 访问位序为 i的节点的值

template 

(七) 遍历双链表

template 

(八) 遍历双链表

template 

结尾:

如果文章中有什么不足,或者错误的地方,欢迎大家留言分享想法,感谢朋友们的支持!

如果能帮到你的话,那就来关注我吧!如果您更喜欢微信文章的阅读方式,可以关注我的公众号

在这里的我们素不相识,却都在为了自己的梦而努力 ❤
一个坚持推送原创开发技术文章的公众号:理想二旬不止

单链表删除所有值为x的元素_双链表的基本实现与讲解(C++描述)相关推荐

  1. 单链表删除所有值为x的元素_线性表之单链表

    单链表 一种以链接方式存储的线性表,适用于频繁增删操作,存储空间不定的情形. 单链表的一个存储结点包含两个域,数据域和指针域.数据域用于存储线性表的一个数据元素,指针域用于指示下一个结点开始的存储地址 ...

  2. 单链表删除所有值为x的元素_C/C++编程笔记:如何使用C++实现单链表?单链表的基本定义...

    如何弥补顺序表的不足之处? 第一次学习线性表一定会马上接触到一种叫做顺序表(顺序存储结构),经过上一篇的分析顺序表的优缺点是很显然的,它虽然能够很快的访问读取元素,但是在解决如插入和删除等操作的时候, ...

  3. 递归删除单链表中所有值为x的元素_如何纯递归反转链表的一部分

    读完本文,你可以去力扣拿下如下题目: 92.反转链表II ----------- 反转单链表的迭代实现不是一个困难的事情,但是递归实现就有点难度了,如果再加一点难度,让你仅仅反转单链表中的一部分,你是 ...

  4. day03链表基础_移除链表元素_设计链表_反转链表

    链表理论基础 链表是一种通过指针串联在一起的线性结构,每一个节点由两部分组成,一个是数据域一个是指针域(存放指向下一个节点的指针),最后一个节点的指针域指向null(空指针的意思). 链表的入口节点称 ...

  5. 【算法和数据结构】_13_小算法_双链表

    没什么新的内容,把自己写的练习代码贴出来,供大家批判. 1 /* 2 本程序用来测试非线性存储结构:双链表 3 */ 4 5 6 #include <stdio.h> 7 #include ...

  6. 双链表java实现_双链表 Java实现数据结构

    创建双链表DoubleLinkedList,带范型 public class DoubleLinkedList { private Node head; private Node tail; priv ...

  7. 广义表head tail 运算_双链表实现LRU缓存淘汰策略

    1.背景 LRU(Least Recently Used)是一种常用的缓存淘汰策略,即当缓存满了之后,删除最近最少使用的数据. LRU的实现,常用的编程语言在语言层面都有实现,可以直接使用.为了深入理 ...

  8. 考研数据结构——(线性表_双链表)

    双向链表 结构体定义 1. 尾插法初始化双向链表 2. 向后遍历双链表 3. 向前遍历双链表 4. 获取指定位序结点 5. 指定结点后插入结点(目前无法加在第一个位置) 6. 删除指定元素后的元素 ( ...

  9. js删除两个集合中共同元素_多个集合中的共同和独特元素

    js删除两个集合中共同元素 本周,我们将暂时中断较高级别的问题和技术文章,以解决我们中许多人可能面临的一些代码问题. 没什么花哨的或太辛苦的,但是有一天它可能会节省您15分钟的时间,偶尔回到基础上也很 ...

最新文章

  1. python连接MySQL并进行数据查询
  2. 广西2021各校高考成绩查询入口,2021年广西高考成绩排名查询系统,广西高考位次排名查询...
  3. es6 迭代器_揭秘ES6迭代器和迭代器
  4. js 获取中括号里面字符串_一日一技:一次性把字符串用多个分隔符分割
  5. 服务器2016修改时间,服务器时间错误
  6. python3爬取中国药学科学数据
  7. php基础之字符串和数组的相互转换及其常用属性(与js相对应的属性 比较)
  8. 混编Swift类和Objc类
  9. sumif单列求和_求和、单条件求和、多条件求和、隔列求和等实用技巧解读
  10. 水晶报表10.0企业版下载地址及注册码
  11. html b5纸尺寸,A5纸的尺寸多大(各种标准纸张大小A1,A2,A3,A4纸的尺寸)
  12. (附源码)springboot大学生防疫封校管理系统 毕业设计632124
  13. Entity Component System与Entity Component
  14. 华为nova6开启开发者模式,连接USB
  15. mysql insert返回值_各种SQL Insert 返回值
  16. 每天学一个 Linux 命令:dnf
  17. 【转载】矩阵求导、几种重要的矩阵及常用的矩阵求导公式
  18. Spring MVC微总结
  19. java jcseg 官网_Jcseg轻量级Java中文分词器2.6.5最新版
  20. 安川机器人焊枪切换设定方法_如何对安川焊接机器人进行焊枪校正

热门文章

  1. Prometheus 原理和实践,含docker部署Prometheus、node Exporters、Alertmanager、Push Gateway、grafana
  2. Echarts数据可视化全解注释
  3. 生成式对抗网络GAN生成手写数字
  4. 【python基础语法】python实现交换操作a,b = b,a的原理
  5. 洛谷P1134阶乘问题(数论,末尾0的个数变形,思维转换)
  6. MySQL命令行导入导出sql文件
  7. SSH (Struts2+Spring3.0+Hibernate3)框架(二) 框架的配置
  8. Takeown 实现解析
  9. [转载] Python字典按照keys排序输出为列表
  10. 同步时序逻辑与异步时序逻辑