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

数据结构--双链表

数据结构–双链表

单链表 VS 双链表
单链表:无法逆向检索,有时候不太方便
双链表:可进可退,存储密度更低一丢丢

双链表的定义

typedef struct DNode
{ElemType data;struct DNode *prior, *next;
}DNode, *DLinkList;

双链表的初始化

bool InitDLinkList(DLinkList &L)
{L = (DNode*)malloc(sizeof(DNode));if (L == NULL)  return false;L->prior = NULL;L->next = NULL;return true;
}

判断双链表是否为空

bool Empty(DLinkList L)
{return L->next == NULL;
}

双链表的插入

在p结点之后插入s结点

特殊处理:p是最后一个结点

bool InsertNextDNode(DNode* p, DNode* s)
{if (p == NULL || s == NULL) return false;s->next = p->next;if (p->next != NULL)p->next->prior = s;s->prior = p;p->next = s;return true;
}

用后插操作实现结点的插入有什么好处?
按位序插入前插操作:
找到前一个结点进行后插操作

双链表的删除

####删除p的后继结点q

特殊处理q是最后一个结点

bool DeleteNextDNode(DNode* p)
{if (p == NULL)  return false;DNode* q = p->next;if (q == NULL)  return false;p->next = q->next;if (q->next != NULL)q->next->prior = p;free(q);return true;
}

销毁双链表

void DestoryList(DLinkList &L)
{while (L->next != NULL)DeleteNextDNode(L);free(L);L = NULL;
}

将指针L置为NULL的意义是,将其指向空地址,表示该指针不再指向任何有效的内存空间。这样做的目的是为了防止出现野指针的问题,即指针指向已被释放的内存空间,避免在后续代码中误用该指针导致程序崩溃或产生不可预料的结果。

双链表的遍历

后向遍历

while (p != NULL)p = p->next;

前向遍历

while (p != NULL)p = p->prior;

前向遍历 (跳过头结点)

while (p->prior != NULL)p = p->prior;

时间复杂度:
双链表不可随机存取,按位查找、按值查找操作都只能用遍历的方式实现。时间复杂度 O(n)

知识点回顾与重要考点

http://www.lryc.cn/news/94167.html

相关文章:

  • javassist 动态修改 jar 包中 class
  • 什么是CC攻击?
  • ​LeetCode解法汇总253. 重构 2 行二进制矩阵
  • ChatGPT实战:生成演讲稿
  • 在线搭建K8S,kubernetes集群v1.23.9,docker支持的最后一个版本
  • http自动跳转https的配置方法
  • 重新初始化k8s集群
  • JetBrains编程IDE将具备Ai助手功能,或将提高开发速度
  • 【网络原理】TCP/IP协议五层模型
  • 【备战秋招】每日一题:2023.05.10-华为OD机试(第二题)-解密
  • 【华为OD机试】矩阵最大值(python, java, c++, js)
  • 通过USB和wifi连接真机编写第一个脚本
  • 【javascript】 javascript对象函数 总结
  • LVS+Keepalived 高可用群集实战部署
  • MCU启动过程
  • Mysql 5.6使用配置文件my.ini来设置长时间连接数据库
  • 改进YOLOv5/YOLOv8:复现结合即插即用 | 高效多尺度注意力(EMA),模块成为YOLOv5改进的小帮手
  • 图像色彩增强论文调研
  • ORACLE透明网关ODBC连接MYSQL
  • Flutter网络请求框架Dio源码分析以及封装(二)--Cookie管理分析
  • Unity如何设计一个技能系统
  • 测试流程体系
  • Linux下CentOS KVM 虚拟化
  • < vue + ElementUi 组件封装:实现弹窗展示富文本数据,允许全文搜索高亮显示搜索内容 >
  • MATLAB 之 低层绘图操作和光照及材质处理
  • LLM-Client一个轻量级的LLM集成工具
  • leetcode动态数组vector实现杨辉三角
  • 第二十三章_Redis高性能设计之epoll和IO多路复用深度解析
  • 基于OpenCV-车辆检测项目(简易版)
  • 用python获取海康摄像机视频