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

news2024/10/23 22:34:04

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

🏠个人主页:尘觉主页

文章目录

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

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

前提

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

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.coloradmin.cn/o/1498149.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

网络编程 · 代码笔记1

目录 前言1、编程环境2、编译命令3、标题名前缀解释4、注意事项 0011客户端读取服务端字符_服务端0012客户端读取服务端字符_客户端0021回声测试_服务端0022回声测试_客户端0030启动端口复用解决端口绑定失败问题0041服务器不间断进行侦听通信_服务端0042服务器不间断进行侦听通…

liunx操作系统 环境变量

环境变量 main函数参数 命令行参数环境变量 环境变量的查看环境变量的获取 main函数参数 命令行参数 main函数是有参数的,只是我们一般不适用 这是main函数从bash中读取进程数据使用的一个基本入口。 下面进行简单演示。 o 好oo都是我们输入的命令行参数。其实&a…

如何查看前端的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": &…

【Linux基础(二)】进程管理

学习分享 1、程序和进程1.1、程序1.2、进程和进程ID 2、Linux下的进程结构3、init进程4、获取进程标识5、fork系统调用5.1、fork函数实例分析 6、进程的特性7、在Linux下进程指令7.1、终止进程指令7.2、查看进程指令:7.3、以树状图列出进程 8、多进程运行异常情况8.…

判断连续数据同意特征的方法:插旗法

bool isMonotonic(int* nums, int numsSize) {int flag 2;for (int i 1; i < numsSize; i) {if (nums[i-1] > nums[i]) {if (flag 0)return false;flag 1;}else if (nums[i-1] < nums[i]) {if (flag 1)return false;flag 0;}}return true; }此代码较为简单&…

Vue中如何处理组件间的耦合问题?

在Vue中处理组件间的耦合问题是前端开发中常见的挑战之一。耦合问题指的是组件之间的依赖关系过于紧密&#xff0c;一旦某个组件发生改动&#xff0c;则可能导致其它组件也需要作出相应调整。为了解决这个问题&#xff0c;我们可以采取以下几种方法&#xff1a; 使用事件总线&…

牛客每日一题之 前缀和

目录 题目介绍&#xff1a; 算法原理&#xff1a; 前缀和&#xff1a; 代码实现&#xff1a; 题目介绍&#xff1a; 题目链接&#xff1a;【模板】前缀和_牛客题霸_牛客网 算法原理&#xff1a; 先讲讲暴力解法每次求出数组下标r之前元素的和&#xff0c;再减去数组下标l-…

Docker容器的操作

目录 运行容器 查看容器 查看容器详细信息 删除容器 启动容器 停止容器 重启容器 暂停容器 激活容器 杀死容器 进入容器 常用 查看容器的日志 拷贝容器的文件到本地 容器改名 查看容器资源 查看容器内部的进程 监测容器发生的事件 检测容器停止以后的反回值…

vue3 + vite全局引入element-plus后使用 Message 消息提示

安装Element plus&#xff1a; pnpm install element-plus 安装unplugin-element-plus 自动导入组件 pnpm i -D unplugin-auto-import pnpm install -D unplugin-element-plus vite.config.ts 使用plugins数组里配置&#xff0c;自动导入 import { fileURLToPath, URL } fro…

【应用多元统计分析】--多元数据的描述和展示(R语言)

一元随机变量 我们用协方差来刻画两个变量的相关关系&#xff0c;这里指的是线性相关关系。 对于一元随机变量的可视化最简单的就是散点图&#xff0c;大致可以看出X和Y之间的相关关系。如果想更好的看X、Y之间的相关关系&#xff0c;可以画二维的散点图。 总结&#xff1a; 均…

蓝桥杯物联网竞赛_STM32L071_11_知识体系的查漏与补缺

太久没学单片机了&#xff0c;再重新过一遍查漏补缺&#xff0c;对其中之前没怎么在意的&#xff0c;而现在又发觉的问题进行再分析与补充 1. debug serial wire是干什么用的 这个东西我勾选不勾选都对我的程序没有什么影响&#xff0c;我很好奇是干什么用的&#xff0c;网上查…

【PCIe】初识PCIe

&#x1f525;博客主页&#xff1a;[PannLZ] &#x1f618;欢迎关注&#xff1a;&#x1f44d;点赞&#x1f64c;收藏✍️留言 文章目录 PCIe简介PCIe速度 PCIe简介 计算机内部有很多电子元器件&#xff0c;他们之间会有数据沟通和传输的需求。如果A元件想给B元件传输数据&am…

JavaWeb04-Request,Response

目录 一、Request&#xff08;请求&#xff09; 1.作用 2.继承体系 3.获取请求数据 &#xff08;1&#xff09;请求行 &#xff08;2&#xff09;请求头 &#xff08;3&#xff09;请求体&#xff08;POST&#xff09; &#xff08;5&#xff09;Request通用方式获取请求…

Unity用Shader将一张图片变成描边图片素描风格。

环境&#xff1a; unity2021.3.x 效果&#xff1a; 实现核心思路(shader)&#xff1a; fixed4 frag (v2f i) : SV_Target {fixed4 col tex2D(_MainTex, i.uv);// 调整相似度bool isRedMatch abs(col.r - _TargetColor.r) < 0.15;bool isGreenMatch abs(col.g - _Target…

消息队列-Kafka-如何进行顺序消费

全局有序 只有 1 个分区&#xff0c;那这个时候就是能够保证消息的顺序消费。 分区有序 如果我们还是想同时消费多个分区并且保证有序&#xff0c;这个时候我们需要将需要保证顺序的消息路由到同一个分区。 在发送消息的时候我们可以看到&#xff1a; 上面的代码定义了消息…

【R语言实战】聚类分析及可视化

&#x1f349;CSDN小墨&晓末:https://blog.csdn.net/jd1813346972 个人介绍: 研一&#xff5c;统计学&#xff5c;干货分享          擅长Python、Matlab、R等主流编程软件          累计十余项国家级比赛奖项&#xff0c;参与研究经费10w、40w级横向 文…

【自然语言处理】BitNet b1.58:1bit LLM时代

论文地址&#xff1a;https://arxiv.org/pdf/2402.17764.pdf 相关博客 【自然语言处理】【大模型】BitNet&#xff1a;用1-bit Transformer训练LLM 【自然语言处理】BitNet b1.58&#xff1a;1bit LLM时代 【自然语言处理】【长文本处理】RMT&#xff1a;能处理长度超过一百万t…

【Vue】sessionStorage存取数据

一. 需求 1.1 模板 Vab Admin Pro 1.2 组件 ElementUI 1.3 阐述 列表页面搜索【关键词】点击【查询】后&#xff0c;点击【查看】按钮跳转到【详情页】&#xff0c;详情页【返回】【保留原搜索关键词】 原图 搜索查询【关键词】 详情 返回后【保留】【搜索查询关键词…

一次简单操作代替所有异常处理

一、背景 在服务端处理前端发过来的响应的时候&#xff0c;开发者不可能穷尽用户的所有奇怪的操作。除此之外&#xff0c;我们还需要应付前端人员对我们的无情吐槽&#xff0c;你对XXXX请求返回的为啥是奇怪的响应数据呢&#xff1f;于是全局异常处理应运而生&#xff0c;一次处…

Java面试篇【并发编程·进阶】常见面试题(2024最新)

并发常见面试题进阶 1.synchronized synchronized关键字解决的是多线程之间访问资源的同步性&#xff0c;synchronized关键字可以保证被它修饰的方法或者代码块在任意时刻只能被一个线程执行。 监视器锁&#xff08;monitor&#xff09;是依赖于底层的操作系统的 Mutex Lock来…