数据结构(八)——初识单链表

😀前言
单链表是数据结构中最基本的一种链表结构,它由一系列节点组成,每个节点包含数据和指向下一个节点的指针。单链表具有灵活性和动态性,可以根据需要插入、删除和查找元素,适用于各种场景和问题的解决。
在本篇文章中,我们将初步介绍单链表的基本概念和特点,包括节点的结构、逻辑关系的表示和链表的操作。通过学习单链表的原理和实现方式,我们可以为后续的数据结构学习打下坚实的基础。

🏠个人主页:尘觉主页

文章目录

  • 数据结构(八)——初识单链表
    • 前提
      • 那怎么表示数据元素之间的逻辑关系呢?
      • 解释
    • 单链表、双向链表、循环链表
      • 单链表
      • 双链表
      • 循环链表
        • 头指针:
        • 头结点:
    • 表示空表
      • 有头结点有什么好处?
    • 😄总结

数据结构(八)——初识单链表

前提

用一组任意的存储单元存储线性表的数据元素(这组存储单元可以是连续的,也可以是不连续的,甚至是零散的分布在内存的任意位置,链表中元素的逻辑次序与物理次序不一定相同)

img

那怎么表示数据元素之间的逻辑关系呢?

  • 在存储自己内容的同时也存储下一个元素的地址。

  • 存储数据元素的域称为数据域,存储直接后继位置的域称为指针域。

  • 指针域中存储的信息称作指针或链。这两部分信息组成ai的存储映象称为结点(Node)。

  • n个结点(ai(1≤i≤n)的存储映象链结成一个链表,即为线性表。

  • 把链表中第1个结点的存储位置叫头指针。

  • 最后一个元素意味着没有直接后继规定最后一个结点指针为空(通常用NULL或^表示)

  • 单链表由头指针唯一确定,因此单链表可用头指针名字来命名

解释

上面已经描述了一个链表的基本结构和工作方式。链表是一种常用的数据结构,用于表示数据元素之间的逻辑关系。

下面我将解释一下如何表示数据元素之间的逻辑关系以及链表的基本概念:

  1. 节点(Node)

    一个节点通常包含两个部分:数据域和指针域。数据域用于存储数据元素的值,而指针域则存储下一个节点的地址。

  2. 头指针(Head Pointer)

    头指针是一个特殊的指针,它指向链表的第一个节点。通过头指针,我们可以访问链表中的所有节点。

  3. 空指针(NULL Pointer)

    最后一个节点的指针域将是空(NULL或^),表示它没有后续节点,即它是链表的尾部。

  4. 表示逻辑关系

    在链表中,数据元素之间的逻辑关系是通过节点之间的链接来表示的。即,一个节点中的指针域指向它的直接后继节点,从而建立了一种逻辑关系。

  5. 单链表

    你提到的这种结构通常称为单链表,因为每个节点只包含指向下一个节点的指针。还有双链表,在这种结构中,每个节点除了包含指向下一个节点的指针外,还包含一个指向前一个节点的指针。

单链表、双向链表、循环链表

单链表

结点只有一个指针域的链表称为单链表或线性链表

image-20230918114900941

双链表

结点有两个指针域的链表称为双链表

img

循环链表

首尾相接的链表叫循环链表

image-20230918115004496

为了更加方便对链表进行操作,会在单链表的第1个结点前附设一个头结点.头结点的数据域可以不存储任何信息,也可以存储如线性表的长度等附加信息,头结点的指针域存储指向线性表第1个元素的结点。

image-20230918130316575

头指针:

指链表指向第一个结点的指针,若链表有头结点,则是指向头结点的指针;
头指针具有标识作用,所以常用头指针冠以链表的名字;
无论链表是否为空,头指针均不为空。头指针是链表的必要元素

头结点:

头结点是为了操作的统一和方便而设立的,放在第一元素的结点之前,其数据域一般无意义(也可存放链表的长度)
有了头结点,对在第一元素结点前插入结点和删除第一结点,其操作与其它结点的操作就统一了
头结点不一定是链表必须要素

首元结点:是指链表中存储第一个数据元素a1的结点

表示空表

image-20230918130444229

有头结点有什么好处?

①有了头结点,对在第一元素结点前插入结点和删除第一结点,其操作与其它结点的操作就统一了

②便于空表和非空表的统一处理

当链表不设头结点时,假设L为单链表的头指针,它应该指向首元结点,则当单链表为长度n为0的空表时,L指针为空(判定空表的条件可记为:L==NULL)。

增加头结点后,无论链表是否为空,头指针都是指向头结点的非空指针。

头指针指向头结点。若为空表,则头结点的指针域为空(判定空表的条件可记为:L ->next== NULL)

顺序表每个元素的存储位置都可从线性表的起始位置计算得到。

而在单链表中,各个元素的存储位置都是随意的。

取得第i个数据元素必须从头指针出发顺链进行寻找,也称为顺序存取的存取结构。之前说的顺序表是随机存取而链表是顺序存储

单链表是由若干个结点构成,所以先定义一下结点。每一个结点都是有两部分组成,一部分是数据元素本身(数据域data)其数据类型根据实际问题的需要确定。另一部分是指向下一个元素(结点)的指针(指针域next)存放下一个元素的地址,结点可以用C语言中的结构体实现当中包含两个成员。

image-20230918131145145

image-20230918131201596

一个元素的地址,结点可以用C语言中的结构体实现当中包含两个成员。

image-20230918131211634

😄总结

本文介绍了单链表作为一种基本的链表结构,在数据结构中的重要性和应用。我们了解了单链表节点的组成和节点之间逻辑关系的表示方式,以及头指针和头结点的概念。

通过学习单链表,我们可以实现各种常见的链表操作,如插入、删除和查找元素。同时,我们也了解到单链表的一些优点和缺点,这有助于我们在实际应用中选择适合的数据结构。

掌握单链表的基本概念和操作是学习和理解更复杂的数据结构的基础。在接下来的学习中,我们将进一步深入探讨链表相关的知识,并学习更多高级的数据结构和算法。

😁热门专栏推荐
想学习vue的可以看看这个

java基础合集

数据库合集

redis合集

nginx合集

linux合集

手写机制

微服务组件

spring_尘觉

springMVC

mybits

等等等还有许多优秀的合集在主页等着大家的光顾感谢大家的支持

🤔欢迎大家加入我的社区 尘觉社区

文章到这里就结束了,如果有什么疑问的地方请指出,诸佬们一起来评论区一起讨论😁
希望能和诸佬们一起努力,今后我们一起观看感谢您的阅读🍻
如果帮助到您不妨3连支持一下,创造不易您们的支持是我的动力🤞

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

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

相关文章

Java 属性可见性和TypeScripta 属性可见性区别

Java 中默认(无修饰符)的可见性对应的是包级私有(package-private),这是 Java 特有的可见性修饰符,有时也称为默认可见性,包级私有的可见性意味着只有同一个包中的其他类才能访问该成员&#xf…

STM32(7)NVIC

1. NVIC 1.1 NVIC简介 1.2 中断协作模型 1.3 NVIC的内部结构 1.4 中断向量表 1.4.2 在参考手册中查阅中断向量表

如何查看前端的vue项目是vue2还是vue3项目

1. 检查package.json文件 在项目的根目录下,打开package.json文件,查找dependencies或devDependencies部分中的vue条目。版本号将告诉你是Vue 2还是Vue 3。例如: Vue 2.x: "vue": "^2.x.x"Vue 3.x: "vue": &…

7.3 支付模块 - 创建订单、查询订单、通知

支付模块 - 创建订单、查询订单、通知 文章目录 支付模块 - 创建订单、查询订单、通知一、生成支付二维码1.1 数据模型1.1.1 订单表1.1.2 订单明细表1.1.3 支付交易记录表 1.2 执行流程1.3 Dto1.3.1 AddOrderDto 商品订单1.3.2 PayRecordDto支付交易记录扩展字段1.3.3 雪花算法…

(上海电力展)2024上海国际智慧电力与电气设备展览会

2024上海国际智慧电力与电气设备展览会 2024 Shanghai International Intelligent Power and Electrical Equipment Exhibition 时 间:2024年7月13-15日 地 点:上海新国际博览中心 展会简介Introduction 随着全球进入互联网和数字经济时…

【计算机考研】考408,还是不考408性价比高?

首先综合考虑,如果其他科目并不是很优秀,需要我们花一定的时间去复习,408的性价比就不高,各个科目的时间互相挤压,如果备考时间不充裕,考虑其他专业课也未尝不可。 复习408本来就是费力不讨好的事情 不同…

组合逻辑电路(一)(加法器)

目录 组合逻辑电路的特点及功能描述 采用SSI的组合逻辑电路的分析与设计 采用SSI的组合逻辑电路的分析 采用SII的组合逻辑电路的设计 例 例 例 常用的MSI组合逻辑电路 半加器 全加器 加法器 串行进位加法器 例 例 超前进位加法器 组合逻辑电路的特点及功能描述 小规模集成…

YOLOv9电动车头盔佩戴检测,详细讲解模型训练

向AI转型的程序员都关注了这个号👇👇👇 一、YOLOv9简介 YOLOv9是YOLO系列算法的最新版本。YOLO系列算法自2015年首次提出以来,已经在目标检测领域取得了显著的进展,以其快速和准确的特点而广受欢迎。 论文地址&#xf…

别再找了,关于免费SSL证书都在这里

免费SSL证书的优点: 成本效益:免费SSL证书可以帮助网站所有者节省资金,特别是对于初创公司或个人网站来说,这是一个很大的优势。提高信任度:通过使用SSL证书,网站可以向访问者展示其对安全性的承诺&#x…

1.5 简述转置卷积的主要思想以及应用场景

1.5 简述转置卷积的主要思想以及应用场景 普通的卷积主要思想: 普通的卷积操作可以形式化为一个矩阵乘法运算,即yAx(1-12) 其中,x和y分别是卷积的输入和输出(展平成一维向量形式),维度分别为d⁽i⁾和d⁽…

经验分享:水牛社怎么做?

本人也就是通过他慢慢学习成长起来的。还是一个网友推荐的,现在他对我来说算是大佬了,已经单飞了,好久都没有联系了,呵呵,真是人往高处走,水往低处流啊。 做网赚会经常和一些网络小白聊天,聊着…

Qt 绘制中的视口(setViewport)和窗口(setWindow)

重点 : 1.绘制(QPainter)可以设置视口,视口下设置窗口,而绘制的构件是以窗口为坐标系进行绘画。 2.先根据绘图设备的物理坐标系的矩形位置,设置视图视口setViewport,然后在以视口为区域去设置…