通过对之前学过的线性表进行时间复杂度分析总结出顺序存储结构线性表的最大问题就是插入和删除需要移动大量的元素,严重影响了效率。为了提高效率,引出一种在逻辑结构上相连但在物理结构上不相连的存储方式--链式存储结构。

链式存储结构的定义

为了表示每个数据元素与其直接后继元素之间的逻辑关系,创建一种结构,结构除了需要存储数据元素本身的信息之外还需要存储其直接后继的信息。如下图:

其中ai和ai+1是线性表中的两个相邻数据元素,但是他们在物理内存上并无相邻关系。

链式存储结构的逻辑结构

在基于链式存储结构的线性表中,每个结点都包含数据域和指针域,其中数据域存储数据元素本身,指针域存储相邻结点的地址,看一幅在内存中更直观的链式存储结构图:

上图表明链表的结点在内存中的地址并不是连续的。

链表分类

链表可以分为单链表、循环链表、双向链表。

单链表:每个结点只包含直接后继的地址信息。

循环链表:单链表中的最后一个结点的直接后继为第一个结点。

双向链表:单链表中的结点包含直接前驱和后继的地址信息。

链表中的概念

头结点:它是链表中的辅助结点,只包含指向第0个数据元素的指针,而没有数据信息,头结点有简化代码的作用,因为它始终指向了第0个元素,便于执行时对元素位置的定位。

数据结点:它是链表中代表数据元素的结点,表现为数据域和指针域。

尾结点:尾结点中存储的地址信息可以用于区分链表类型。为空:单链表。为第0个结点地址:循环链表。为随机值:非法链表。

单链表的结点定义

    struct Node : public Object{T value;Node* next;};

结点继承自顶层父类Object。

包含一个泛型变量。

指向Node结构体的指针变量。

成员变量为公有访问级别。

链表的插入操作

从头结点开始,通过current指针定位到待插入的目标位置

从堆空间申请新的Node结点并初始化数据域

执行插入操作。

操作如图:

链表的删除操作

从头结点开始,通过current指针定位到目标位置

使用toDel指针指向需要删除的结点

执行删除操作

操作如图:

总结:

链表中的数据元素在物理内存中无相邻关系。

链表中的结点包含数据域和指针域。

头结点用于辅助数据元素定位,方便插入和删除。

插入和删除操作需要保证链表的完整性。

数据结构--链式存储结构相关推荐

  1. 数据结构——链式存储结构

    文章目录 前言 一.链式存储结构 二.相关术语 1.结点 2.链表 3.单链表 4.双链表 5.循环链表 6.头指针 7.首元结点 三.单链表 1.单链表的实现 2.单链表的初始化 3.单链表的销毁 ...

  2. 数据结构-第二章(5)-链式存储结构

    数据结构 ⚡️数据结构-第一章 ⚡️抽象数据类型案例 ⚡️数据结构-第二章(1)-线性结构 ⚡️数据结构-第二章(2)-线性表的顺序表示和实现 ⚡️数据结构-第二章(3)-顺序表(含代码) ⚡️数据结 ...

  3. 数据结构和算法:(3)3.2线性表的链式存储结构

    线性表的链式存储结构的特点是用一组任意的存储单元存储线性表的数据元素也就是说你这个可以放在A地点,这个可以放在E地点,A地点和E地点中间可以隔开一个C地点和D地点,这样是允许的),这组存储单元可以存在 ...

  4. 从零开始学数据结构和算法(二)线性表的链式存储结构

    链表 链式存储结构 定义 线性表的链式存储结构的特点是用一组任意的存储单元的存储线性表的数据元素,这组存储单元是可以连续的,也可以是不连续的. 种类 结构图 单链表 应用:MessageQueue 插 ...

  5. 数据结构(二):线性表包括顺序存储结构(顺序表、顺序队列和顺序栈)和链式存储结构(链表、链队列和链栈)...

    还记得数据结构这个经典的分类图吧: 今天主要关注一下线性表. 什么是线性表 线性表的划分是从数据的逻辑结构上进行的.线性指的是在数据的逻辑结构上是线性的.即在数据元素的非空有限集中 (1) 存在唯一的 ...

  6. 《数据结构》c语言版学习笔记——其他链表(线性表的链式存储结构Part2)

    线性表的链式存储结构 数据结构系列文章 第三章 循环链表.双向链表 文章目录 线性表的链式存储结构 前言 一.循环链表 (一)定义 (二)尾指针 二.双向链表 (一)定义 (二)代码 总结 前言 提示 ...

  7. 《数据结构》c语言版学习笔记——单链表结构(线性表的链式存储结构Part1)

    线性表的链式存储结构 数据结构系列文章 第二章 单链表结构 文章目录 线性表的链式存储结构 前言 一.单链表的建立 代码 二.单链表的读取 代码 三.单链表的插入 代码 四.单链表的删除 代码 五.单 ...

  8. 队列的链式存储结构及其实现_了解队列数据结构及其实现

    队列的链式存储结构及其实现 A queue is a collection of items whereby its operations work in a FIFO - First In Firs ...

  9. Python 数据结构 之 串 的链式存储结构

    本文所采用的数据结构模板为 <数据结构教程>C语言版,李春葆.尹为民等著. 改篇所涉及到的是 串 的链式存储结构. 用Python仿照C语言来实现. 文章转载请注明:  Python 数据 ...

最新文章

  1. Windows 10离线安装.NET Framework 3.5
  2. 漫画 | 花了七天时间测试,我彻底搞明白了 TCP 的这些内存开销!
  3. 微信小程序惩治“老赖” 河北高院“老赖地图”上线
  4. 深拷贝与浅拷贝、空类与空数组
  5. 微信小程序-设置启动页面
  6. 研究人员开发出最节能的 Wi-Fi 技术
  7. ext grid 重新布局_如何让你的 CSS Grid 布局有良好的可访问性
  8. 2018-2019 ACM-ICPC Pacific Northwest Regional Contest (Div. 1) - D Count The Bits
  9. java堆栈有序无序,浅谈Java并发编程系列(四)—— 原子性、可见性与有序性
  10. 作业调度进程c语言代码,进程调度 时间片轮转调度算法源代码(C语言)
  11. RS232引脚定义及串口通信中与USB等转接
  12. 腾讯web引用skey g_tk bkn和日期显示分析
  13. Ubuntu Linux系统Google日语输入法跨平台版Mozc安装笔记
  14. 《前端单位和网络地址》随手学习笔记
  15. spark读csv文件转成map
  16. css圆角(border-radius)的深入理解
  17. BigGAN代码解读(gpt3.5帮助)——生成器部分
  18. python目标跟踪精度曲线图_目标跟踪配置(三)-评价指标-benchmark(更新中,关注请收藏。。。)...
  19. node.js搭建文件服务器,Node.js创建HTTP文件服务器的使用示例
  20. 【Nowcoder】2018 ACM-ICPC 上海大都会赛 Matrix Game (网络流 最大流)

热门文章

  1. Json与字符串之间的转换
  2. opengl中如何确定鼠标的点击坐标在一个圆柱体范围之内?
  3. 水果店业绩下滑的原因有哪些,水果店亏损有哪些原因
  4. 《译 SFML Essentials 英文版》—— 《第五章》 “ Exploring a World of Sound and Text ”
  5. [转载] python 第三方模块
  6. 淘宝推出特价老年版:下沉市场是电商未来拓展方向
  7. 自动化测试python selenium案例_Python selenium自动化测试框架实战--登录测试案例
  8. php iframe 自适应高度,让iframe自适应高度的讲解
  9. Linux之kill命令详解
  10. logitech options 蓝牙识别不到设备