【数据结构】链表的概念 及 分类 (使用比喻解释概念)

一. 链表的概念及结构

概念:链表是一种 物理存储结构上非连续 、非顺序的存储结构,数据元素的 逻辑顺序 是通过链表中的 指针链接 次序实现的。

1.1 超级通俗的比喻

 

链表的结构跟火车车厢相似,淡季时车次的车厢会相应减少,旺季时车次的车厢会额外增加几节。只需要将火车里的某节车厢去掉/加上,不会影响其他车厢,每节车厢都是独立存在的。

车厢是独立存在的,且每节车厢都有车门。想象一下这样的场景,假设每节⻋厢的车门都是锁上的状态,需要不同的钥匙才能解锁,每次只能携带一把钥匙的情况下如何从车头走到车尾?最简单的做法:每节车厢里都放一把下一节车厢的钥匙。

1.2 在链表里,每节"车厢"是什么样的呢?

  • 与顺序表不同的是,链表里的每节"车厢"都是独立申请下来的空间,我们称之为"结点/节点"
  • 节点的组成主要有两个部分:数据域:当前节点要保存的数据  和  指针域:保存下一个节点的地址(指针变量)。
  • 图中指针变量  plist  保存的是第一个节点的地址,我们称  plist此时“指向”第一个节点,如果我们希望plist“指向”第二个节点时,只需要修改  plist  保存的内容为  0x0012FFA0。
  • 为什么还需要指针变量来保存下一个节点的位置?
  • 链表中每个节点都是  独立申请  的(即需要插入数据时才去申请一块节点的空间),我们需要通过指针变量来保存下一个节点位置才能从当前节点找到下一个节点。
  • 结合前面学到的结构体知识,我们可以给出每个节点对应的结构体代码:
  • 假设当前保存的节点为整型:
  • 创建一个节点
  • struct SListNode
    {int data; //节点数据struct SListNode* next ; //指针变量用保存下一个节点的地址
    };

       当我们想要保存一个整型数据时,实际是向操作系统申请了一块内存,这个内存不仅要保存整型数据,也需要保存下一个节点的地址(当下一个节点为空NULL  时保存的地址为空NULL)。
当我们想要从第一个节点走到最后一个节点时,只需要在前一个节点拿上下一个节点的地址(下一个节点的钥匙)就可以了。

1.3 总结:对应 1.1 节 的 比喻 和 链表的关系

  • 火车 == 链表
  • 车厢 == 节点
  • 车头 == 第一个节点
  • 车头自己的钥匙 == 上图中的 plist ,存放第一个节点的地址
  • 下一个车厢的钥匙 == 节点存放的指针
  • 尾车厢没钥匙 == 尾节点 指针域为 NULL
  • 各个车厢相对独立 == 各个节点相对独立

1.4 补充说明:

1 、链式结构在逻辑上是连续的,在物理结构上不一定连续

2 、节点一般是从堆上申请的

3 、从堆上申请来的空间,是按照一定策略分配出来的,每次申请的空间可能连续,可能不连续

二. 链表的分类

1.1 链表的多样 和 说明

链表的结构非常多样,以下情况组合起来就有 8 种(2x2x2)链表结构:

 

1.1.1 一些解释说明
带头链表:

在单链表中,我们提到的“头节点”的“头”和“带头”链表是两个概念

单链表中提到的 “头结点” 指的是第一个有效的节点 “带头” 链表里的 “头” 指的是无效的节点

带头链表的 头结点: 哨兵位 (不保存任何有效的数据)

 循环链表:

一般链表的 尾节点 next 指向 NULL,

而 循环链表 尾节点 next 指向 头节点,刚好 头尾相连,形成一个环状,即循环

1.2 链表说明:

虽然链表的种类非常之多,但是使用比较多的只有两种:单链表〈不带头单向不循环链表) 和 双向链表(带头双向循环链表), 学会了这两种链表(代表的两种 最复杂 或 最简单 的情况),其他 6 种的实现就会了

1. 不带头单向非循环链表( 单链表 ): 结构简单 ,一般不会单独用来存数据。实际中更多是作为 其他数据结构的子结构 ,如哈希桶、图的邻接表 等等。另外这种结构在 笔试面试 中出现很多。

2. 带头双向循环链表( 双向链表 ):  结构最复杂 ,一般用在单独存储数据。实际中使用的链表数据结构,都是带头双向循环链表。另外这个结构虽然结构复杂,但是使用代码实现以后会发现结构会带来很多优势,实现反而简单了,后面我们代码实现了就知道了。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/450338.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

关于bypassuac的探究——思考

我们所使用的几个api,如RegCreateKeyExA、RegSetKeyExA都是直接修改注册表的操作,这种操作应该被归类为敏感操作,那么这里会不会被杀软拦截呢,去测试一下 windows defender正常上线 获取到的权限也是bypassuac后的权限 再看一下…

【计算机视觉】目标检测 |滑动窗口算法、YOLO、RCNN系列算法

一、概述 首先通过前面对计算机视觉领域中的卷积神经网络进行了解和学习,我们知道,可以通过卷积神经网络对图像进行分类。 如果还想继续深入,会涉及到目标定位(object location)的问题。在图像分类的基础上(Image classification)的基础上…

笔记本加装内存条

文章目录 一、拆前准备1.分析短板2.内存条选购3.工具准备 二、拆机实操1.拆后盖2.去静电、电源断电3.斜插45度,听到“嗒”的一声,说明成功了4.插回电源,开机测试 一、拆前准备 1.分析短板 内存、外存、显卡、CPU,提高短板不亚于…

【测试运维】web自动化全知识点笔记第1篇:什么是Web自动化测试(已分享,附代码)

本系列文章md笔记(已分享)主要讨论Web自动化测试相关知识。了解什么是自动化,理解什么是自动化测试以及为什么要使用自动化测试。具体包含:WebDriver的基本操作,WebDriver的鼠标、键盘操作,下拉选择框、警告…

【网络协议分析】利用Wireshark分析IP分片

一、实验目的 利用Wireshark软件抓包分析IP分片,了解IP分片的工作原理。 二、实验过程 1、网络拓扑 设备 IP地址 设备接口 MTU AR1 172.30.132.164 Ethernet 0/0/0 700 AR2 172.30.132.165 Ethernet 0/0/0 1200 2、实验过程 (1&#xf…

Juniper SRX防火墙HA Cluster更换故障设备

一、设备状态信息确认及备份 如果遇到整机挂掉,仅需要备份状态的设备,如果fpc状态异常RMA整机,最好是能做全部的备份,毕竟数据无价,多一分备份不会有坏处 登陆SRX node0和node1系统 1、配置进行备份 node0> conf…

类银河恶魔城学习记录1-1 Player状态机的搭建 P28

对状态机的介绍 什么是状态机?一篇文章就够了 - 知乎 说实话,目前并不能深入理解状态机的奇妙之处(当然,我觉得状态机作为教程的重要组成部分是不得不理解的,所以以下我会对游戏教程内的状态机做一些我认为的解释&am…

2024年 复习 HTML5+CSS3+移动web 笔记 之CSS遍 第5天

第 五 天 整个网站例 5.1 准备工作 项目目录与版心 base.css 5.2 网页制作思路 5.3 header 区域-整体布局 5.4 header区域-logo 5.5 header区域-导航 index.html <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8">&l…

【初中生讲机器学习】4. 支持向量机算法怎么用?一个实例带你看懂!

创建时间&#xff1a;2024-02-02 最后编辑时间&#xff1a;2024-02-03 作者&#xff1a;Geeker_LStar 你好呀~这里是 Geeker_LStar 的人工智能学习专栏&#xff0c;很高兴遇见你~ 我是 Geeker_LStar&#xff0c;一名初三学生&#xff0c;热爱计算机和数学&#xff0c;我们一起加…

0203-2-输入输出系统

第六章&#xff1a;输入输出系统 I/O系统的功能&#xff0c;模型和接口 I/O系统管理的对象是I/O设备和相应的设备控制器。 I/O系统的基本功能 隐藏物理设备的细节与设备的无关性提高处理机和I/O设备的利用率对I/O设备进行控制确保对设备的正确共享错误处理 I/O软件的层次结…

MySQL 索引和事务

目录 1 索引1.1 简介1.2 使用1.3 示例 2 事务2.1 简介2.2 使用 1 索引 1.1 简介 索引是一种特殊的文件&#xff0c;包含着对数据表里所有记录的引用指针。可以对表中的一列或多列创建索引&#xff0c;并指定索引的类型&#xff0c;各类索引有各自的数据结构实现。 索引底层是…

Windows、Linux、Mac数据库的安装(mysql、MongoDB、Redis)

数据库的安装 作为数据存储的重要部分&#xff0c;数据库同样是必不可少的&#xff0c;数据库可以分为关系型数据库和非关系型数据库。 关系型数据库如 SQLite、MySQL、Oracle、SQL Server、DB2 等&#xff0c;其数据库是以表的形式存储&#xff1b;非关系型数据库如 MongoDB…