单链表,三部分详解(第一部分)单链表的解析

news2024/10/6 0:34:36

1. 链表的概念及结构

链表就是一个在物理储存上非连续,但在逻辑顺序上是连续的指针链接实现。

 

链表就像一大节火车,你在淡季的时候可以把车厢减少一点,旺季的 时候可以多加一点,不会影响其他车厢的使用。每节车厢都独立存在。

那我们怎么让这些火车完成所谓的逻辑顺序的呢?假设每节车厢放着下一个车厢的钥匙,你在走到这一节车厢的时候,就能拿到下一节车厢的钥匙,进入下一节车厢,

这样就相当于往一个结构体里放进一个同类型的结构体指针,就可以同个这个指针指向下一个结构体。

 

与顺序表不同的是这样的每节车厢的独立空间,我们叫做“节点或结点”。

这个节点要保存的是一个数据,和下一个节点的指针。 

为什么要一个指针指向下一个空间呢?因为节点的空间和顺序表不同是用数组存储的。而是随机的内存空间。所以要拿一个指针来寻找。下面的代码表示单链表的节点。

struct SListNode
{
 int data; //节点数据
 struct SListNode* next; //指针变量⽤保存下⼀个节点的地址
};

2. 单链表的实现

typedef int SLTDataType;
typedef struct SListNode
{
 SLTDataType data; //节点数据
 struct SListNode* next; //指针保存下⼀个节点的地址
}SLTNode;
void SLTPrint(SLTNode* phead);
//头部插⼊删除/尾部插⼊删除
void SLTPushBack(SLTNode** pphead, SLTDataType x);
void SLTPushFront(SLTNode** pphead, SLTDataType x);
void SLTPopBack(SLTNode** pphead);
void SLTPopFront(SLTNode** pphead);
//查找
SLTNode* SLTFind(SLTNode* phead, SLTDataType x);
//在指定位置之前插⼊数据
void SLTInsert(SLTNode** pphead, SLTNode* pos, SLTDataType x);
//删除pos节点
void SLTErase(SLTNode** pphead, SLTNode* pos);
//在指定位置之后插⼊数据
void SLTInsertAfter(SLTNode* pos, SLTDataType x);
//删除pos之后的节点
void SLTEraseAfter(SLTNode* pos);
//销毁链表
void SListDesTroy(SLTNode** pphead);

这是单链表实现用到的接口,在下一部分会详细进行讲解。 

3. 链表的分类

链表肯定不止一种单链表,他总共用八种,但最重要的就是单链表和双链表 

 

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

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

相关文章

Hadoop+Hive+Spark+Hbase开发环境练习

1.练习一 1.数据准备 在hdfs上创建文件夹,上传csv文件 [rootkb129 ~]# hdfs dfs -mkdir -p /app/data/exam 查看csv文件行数 [rootkb129 ~]# hdfs dfs -cat /app/data/exam/meituan_waimai_meishi.csv | wc -l 2.分别使用 RDD和 Spark SQL 完成以下分析&#xf…

【环境】Linux下Anaconda/ Miniconda安装+百度Paddle环境搭建+Cudnn(3090显卡+CUDA11.8+cudnn8.6.0)

清华源帮助链接:https://mirror.tuna.tsinghua.edu.cn/help/anaconda/ 下载链接:https://mirrors.tuna.tsinghua.edu.cn/anaconda/miniconda/ 其他深度学习环境相关博文:【stable-diffusion】4090显卡下dreambooth、lora、sd模型微调的GUI环境…

没有英语要求的中国人大女王金融硕士有多香你可能还不知道

在当今全球化的世界中,英语已经成为了一种国际通用语言。对于许多学生来说,掌握英语是实现个人发展和职业成功的关键。尤其是在读研阶段,英语水平的要求更是不容忽视。但现实问题是我们没有相应的语言环境,直接导致的是大学的英语…

GPR 子波 一阶微分高斯脉冲和Ricker子波

gprMAX仿真时 用ricker子波,被审稿人咨询为什么用ricker波? 咨询了GPR设计专家,地耦雷达会用一阶高斯微分,空藕用ricker子波。实际上,我们都么有考虑这个。 给出matlab绘制代码 1 高斯脉冲 1.1 代码 % Parameters…

docker-rabbitmq 安装依赖

出现的问题如下: channel error; protocol method: #method(reply-code404, reply-textNOT_FOUND - no channel error; protocol method: #method<channel.close>(reply-code404, reply-textNOT_FOUND - no 查看rabbitmq 客户端是否存在如…

几千粉丝的视频账号播放量只有几百怎么办?借助批量剪辑快速提升播放量

为什么很多人的短视频账号明明有几千粉丝,但是发的作品却只有几百的播放量? 其实原因很简单,大多数人在起号的时候都会犯一个低级错误——盲目追求粉丝数量,而不在意粉丝质量。 做付费流量都懂:越是便宜的粉&#xf…

【会议征稿通知】第三届密码学、网络安全和通信技术国际会议(CNSCT 2024)

第三届密码学、网络安全和通信技术国际会议(CNSCT 2024) 2024 3rd International Conference on Cryptography, Network Security and Communication Technology 随着互联网和网络应用的不断发展,网络安全在计算机科学中的地位越来越重要&…

linux elf relationship between data structures involved in symbol resolution

When a program imports a certain function or variable, the linker will include a string with the function or variable’s name in the .dynstr section. A symbol (Elf Sym) that refers to the function or variable’s name in the .dynsym section, and a relocati…

vue面试题及答案【集合目录】

前言: 欢迎浏览和关注本专栏《 前端就业宝典 》, 不管是扭螺丝还是造火箭, 多学点知识总没错。 这个专栏是扭螺丝之上要造火箭级别的知识,会给前端工作学习的小伙伴带来意想不到的帮助。 本专栏将前端知识拆整为零,主要…

UI自动化测试,让测试高效起来

RunnerGo提供从API管理到API性能再到可视化的API自动化、UI自动化测试功能模块,覆盖了整个产品测试周期。 RunnerGo UI自动化基于Selenium浏览器自动化方案构建,内嵌高度可复用的测试脚本,测试团队无需复杂的代码编写即可开展低代码的自动化…

软考-des题目案例

1.补全图片中的数字 (1)10 ,(2)6,(3)1,(4)11 2.初始置换简单计算 置换时,从左上角的第一个元素开始,表示输入的明文的第5…

中国人民大学金融加拿大女王大学硕士项目:中外名校强强联手,共同打造金融精英

随着全球经济一体化的不断深入,金融行业在国际竞争中的地位日益凸显。为了培养具有国际视野、创新精神和实践能力的金融人才,中国人民大学与加拿大女王大学携手合作,共同打造了金融硕士项目。人大女王金融硕士项目旨在为学生提供世界一流的教…

sshd 解决问题 Deprecated SSH Cryptographic Settings 通过修改配置 去掉废弃的加密算法

sshd 解决问题 Deprecated SSH Cryptographic Settings 通过修改配置 去掉废弃的加密算法 证实无效, 有效解决办法是升级 openssh到最新版本,可以 yum 或者 编译安装 漏洞检测报说 使用废弃的加密算法 aes128-cbc aes256-cbc我们通过配置文件来去掉这两个算法,只保留系统中的…

使用Ubuntu系统搭建RabbitMQ服务并结合内网穿透实现公网访问

文章目录 前言1.安装erlang 语言2.安装rabbitMQ3. 内网穿透3.1 安装cpolar内网穿透(支持一键自动安装脚本)3.2 创建HTTP隧道 4. 公网远程连接5.固定公网TCP地址5.1 保留一个固定的公网TCP端口地址5.2 配置固定公网TCP端口地址 前言 RabbitMQ是一个在 AMQP(高级消息队列协议)基…

labelimg使用以及xml和txt转化

一、使用 winr——输入cmd 激活已有的环境 conda activate torch1.2.0 下载lebelme pip install labelme3.16.7 再输入labelme打开软件就可 可以设置自动保存,View——auto save mode打上勾 二、注意 1.自己类的定义名称,在txt中是0,1&a…

AI智慧安防智能监控平台EasyCVR隔天设备录像播放失败是什么原因?该如何解决?

安防视频监控/视频集中存储/云存储/磁盘阵列EasyCVR平台部署轻快,可支持的主流标准协议有国标GB28181、RTSP/Onvif、RTMP等,以及支持厂家私有协议与SDK接入,包括海康Ehome、海大宇等设备的SDK等,能对外分发RTMP、RTSP、HTTP-FLV、…

java: 警告: 源发行版 8 需要目标发行版 1.8;(可我的项目是其他版本啊?)

我的项目是1.7 可运行时却要求是1.8 情况1 提示需要1.8 而你刚好项目就是1.8 那么就是配置问题 这里就不描述怎么解决了 方案很多。 情况2 项目用的不是XX版本却提示需要XX版本 在你的Maven目录的conf文件夹下settings.xml中下面 不知道maven目录在哪从这里看 如果这里指…

RFID资产管理解决方案

RFID固定资产管理方案提供了更高效、更安全、更便捷的解决方案,覆盖了资产全生命周期管理,包括采购、入库、领用、维修、调拨、归还和报废等所有环节。这有助于建立规范的管理标准和健全的管理体系,有效地克服了传统手工统计繁琐、文件繁多导…

蛇口街道小区长者服务示范点 ——在家门口“乐享晚年”

2023年9月28日,深圳市南山区蛇口街道创建健康街道行动之“老年肌少症免费筛查”项目走进了海昌社区,为数十位长者开展了系统筛查。在家门口就能够享受到由蛇口医院康复科医生提供的专业服务,这对于小区的老人们来说还是第一次。自今年7月以来…

vue3使用 echarts - 饼图、折线图

下载安装 npm install -S echarts使用 饼图 - 带中心图形 - graphic - elements import { onMounted, ref, reactive, unref, nextTick } from "vue"; import * as echarts from "echarts"; import circle from "/assets/panel/circle.png" i…