当前位置: 首页 > article >正文

一篇博客读懂双向链表

目录

一、双向带头循环链表的格式

二、链表的初始化和销毁

2.1链表的初始化

2.2链表的销毁 

三、链表的检查与准备 

3.1链表的打印

3.2创建新结点 

四、链表增删查改 

4.1尾插

4.2尾删

4.3头插

4.4头删 

4.5查找 

4.6任意位置前插入 

4.7删除任意位置 


一、双向带头循环链表的格式

我们在这里要写的是双向带头循环链表(以下简称链表),可以说所有buff都叠满了,我们写起来肯定比单链表要得心应手多得多。

我们从图中可以就看到我们需要定义的结构体数据了:

二、链表的初始化和销毁

2.1链表的初始化

从定义的结构体我们就可以轻松想到我们的链表应当如何初始化,那就是让next和prev都指向它本身,此外,还要记住既然是链表,那么我们的结点都是动态开辟出来的。

2.2链表的销毁 

链表的销毁当然也是一个结点一个结点free的,而且因为我们的pHead是哨兵位,我们设置的cur应该从pHead的下一个结点开始free,同时,通过对while条件的设置,保证pHead不被重复free

三、链表的检查与准备 

3.1链表的打印

我们在测试时必须要能直观地观察我们的数据吧,这时一个打印链表函数就是必不可少的。 

3.2创建新结点 

为了我们插入方便,我们还要再写一个创建结点的函数。

 

四、链表增删查改 

双向带头循环链表集满所有buff,代码简易,所以这里不再过多赘述,容易忽略的地方会特别提醒

4.1尾插

4.2尾删

我们的尾删是要不包括头结点的,所以我们要额外判断一下pHead的next 

4.3头插

 

4.4头删 

我们的头删也是要不包括头结点的,所以我们也要额外判断一下pHead的next 

 

4.5查找 

4.6任意位置前插入 

 

4.7删除任意位置 

五、代码 

​​​​​​​我的源代码:登录 - Gitee.comicon-default.png?t=N7T8https://gitee.com/bright-and-sparkling-at-night/studying/commit/3d76ecd9b92e19d45d701fbfd83b5de275e64012

 

 

 

 


http://www.kler.cn/a/135365.html

相关文章:

  • 鸿蒙next版开发:相机开发-适配不同折叠状态的摄像头变更(ArkTS)
  • Ceph 中Crush 算法的理解
  • Thread类及常见方法
  • 数据集标注txt文件读取小工具
  • C++编程:利用环形缓冲区优化 TCP 发送流程,避免 Short Write 问题
  • Spring Boot 1.x 版本可以集成 Spring Cloud Sleuth
  • 电机应用开发-PID控制器参数整定
  • Git使用指南
  • 2023前端大厂高频面试题之CSS篇(2)
  • JVM中的 -Xms参数 设置 JVM 的初始堆大小
  • 【数据结构】——双链表(增删查改)
  • Django_学习_02
  • GO 抽象工厂模式设计
  • 『亚马逊云科技产品测评』活动征文|通过lightsail一键搭建Drupal VS 手动部署
  • 快速集成Skywalking 9(Windows系统、JavaAgent、Logback)
  • Django学习日志08
  • 详解JS遍历数组的十八种方法
  • 微分方程,含矩阵的指数函数
  • MAC上修改mysql的密码(每一步都图文解释哦)
  • html-网站菜单-点击菜单展开相应的导航栏,加减号可切换
  • LaTex 空行
  • 企业实现员工聊天和转账行为的实时监管
  • 见面礼——图论
  • 01_SHELL编程之变量定义(一)
  • 【Python】12 GPflow安装
  • 大批量合并识别成一个表或文档的方法