数据结构之单单单——链表
目录
一.链表
1)链表的概念
2)链表的结构
二.单链表的实现
三.链表的分类
1)单向或者双向
2)带头或不带头
3)循环或非循环
一.链表
1)链表的概念
链表(Linked List)是一种物理存储结构上非连续,非顺序的储存结构,数据元素的逻辑顺序是通过链表中指针链接次序实现的。要注意,链表也是线性表----->但链表在物理结构上不是线性的。
2)链表的结构
举个栗子让我们更好的理解链表的结构:想象一辆火车,有一节一节的车厢,每个车厢都是独立存在的,旺季的时候多添加几节车厢,淡季的时候减少几节车厢,假如我们只能带一把钥匙从车头走到车尾,我们能想到的最简单的方法就是在每节车厢都放上下一节车厢的钥匙。
在链表里是什么形式呢?

与顺序表的不同,每一个都是单独申请的空间(即需要要插入数据时才去申请一块节点的空间),这每个空间我们称之为节点。节点的组成我们直观的从图中就能看出来:要保存的数据和保存下一个节点的地址,我们需要通过指针变量来保存下一节点位置才能从当前节点找到下一节点,这样就可以使我们的链表真正链接起来。
图中指针变量qList保存的是第一个节点的地址,此时qList指向第一个节点,如果我们想让其指向第二个节点时,我们只需要把其保存的指针变量修改成0x0012FFA0即可让qList直接指向第二节点。
假设是整型,我们给出当前的结构体代码:
struct SListNode
{int data; //节点数据struct SListNode* next; //指针变量⽤保存下⼀个节点的地址
};
当我们想要保存下一个整型数据的时候,实际上我们向系统申请了一块内存,这个内存不仅要保存整型数据,也需要保存下一个节点的地址(当下一个节点为空时保存地址为空)。我们想从第一个节点走到最后一个节点的时候,只需要在前一个节点拿上下一个节点的地址就可以了。
void SLTPrint(SLTNode* phead){SLTNode *phead = phead;while(pcur){printf("%d",pcur->data);pcur = pcur->next;}printf("\n");
}
如何实现从头到尾的打印?

ps.:
- 在逻辑上是连续的,在物理结构上不一定连续
- 节点一般是从堆上申请的
- 从堆上申请的空间是按照一定策略分配出来的,每次申请的空间可能连续,也可能不连续
二.单链表的实现
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);
三.链表的分类
1)单向或者双向


2)带头或不带头

3)循环或非循环

虽然链表结构这么多,但我们最常用的还是两种链表,一种最简单,一种最复杂。
1.无头单向非循环列表(也就是单链表):结构比较简单,一般不会单独用来存储数据。现实中更多是作为其他数据结构的子结构,如哈希桶之类的。
2.带头双向循环链表:结构最复杂,一般用于单独储存数据。实际使用的链表数据结构大部分都是这种链表。这种链表虽然麻烦一点,但这个结构往往具有很多优势,实现起来反而简单许多。
后面会详细讲这些实现是如何操作的~~~
🎈🎈完结撒花🎈🎈
相关文章:
数据结构之单单单——链表
目录 一.链表 1)链表的概念 2)链表的结构 二.单链表的实现 三.链表的分类 1)单向或者双向 2)带头或不带头 3)循环或非循环 一.链表 1)链表的概念 链表(Linked List)是一种…...
【Linux笔记】 基础指令(二)
风住尘香花已尽 日晚倦梳头 重命名、剪切指令 -- mv 简介: mv 命令是 move 的缩写,可以用来移动文件或者将文件改名,是 Linux 系统下常用的命令,经常用来备份文件或者目录 语法: mv [选项] 源文件或目录 目标文件或目录…...
软件全套资料梳理(需求、开发、实施、运维、安全、测试、交付、认证、评审、投标等)
软件全套精华资料包清单部分文件列表: 工作安排任务书,可行性分析报告,立项申请审批表,产品需求规格说明书,需求调研计划,用户需求调查单,用户需求说明书,概要设计说明书,…...
javacv实时解析pcm音频流
javacv实时解析pcm音频流 解析代码 try (ByteArrayInputStream inputStream new ByteArrayInputStream(bytes);){FFmpegFrameGrabber grabber new FFmpegFrameGrabber(inputStream);// PCM S16LE 格式grabber.setFormat("s16le");// 采样率grabber.setSampleRate(1…...
Matlab|考虑极端天气线路脆弱性的配电网分布式电源和储能优化配置模型
1主要内容 程序主要参考《考虑极端天气线路脆弱性的配电网分布式电源配置优化模型-马宇帆》,针对极端天气严重威胁配电网安全稳定运行的问题。基于微气象、微地形对配电网的线路脆弱性进行分析,然后进行分布式电源接入位置与极端天气的关联性分析&#…...
【Python基础】装饰器(3848字)
文章目录 [toc]闭包什么是装饰器装饰器示例不使用装饰器语法使用装饰器语法 装饰器传参带参数的装饰器类装饰器魔术方法\__call__()类装饰器示例带参数类装饰器property装饰器分页操作商品价格操作 个人主页:丷从心 系列专栏:Python基础 学习指南&…...
十、Redis内存回收策略和机制
1、Redis的内存回收 在Redis中可以设置key的过期时间,以期可以让Redis回收内存,循环使用。在Redis中有4个命令可以设置Key的过期时间。分别为 expire、pexpire、expireat、pexpireat。 1.1、expire expire key ttl:将key的过期时间设置为tt…...
Ansible --- playbook 脚本+inventory 主机清单
一 inventory 主机清单 Inventory支持对主机进行分组,每个组内可以定义多个主机,每个主机都可以定义在任何一个或 多个主机组内。 如果是名称类似的主机,可以使用列表的方式标识各个主机。vim /etc/ansible/hosts[webservers]192.168.10.1…...
【hive】transform脚本
文档地址:https://cwiki.apache.org/confluence/display/Hive/LanguageManualTransform 一、介绍二、实现1.脚本上传到本地2.脚本上传到hdfs 三、几个需要注意的点1.脚本名不要写全路径2.using后面语句中,带不带"python"的问题3.py脚本Shebang…...
5款可用于LLMs的爬虫工具/方案
5款可用于LLMs的爬虫工具/方案 Crawl4AI 功能: 提取语义标记的数据块为JSON格式,提供干净的HTML和Markdown文件。 用途: 适用于RAG(检索增强生成)、微调以及AI聊天机器人的开发。 特点: 高效数据提取,支持LLM格式,多U…...
投影、选择转SQL语言
使用以下两个表进行举例,第一个表为R表,第二个表为S表 R.AR.BR.C123456789 S.AS.BS.C101112131415161718 1、投影转SQL语言: 兀 A,B,C (R) 等价于select A,B,C from R 解释: 兀:相当于select (R):相当于from R…...
系统加固-自用
一、windows 1、概述 (1)、权限最高:system(系统账户),权限比administrator权限还高 (2)、常见操作系统安全漏洞类型 缓冲区溢出漏洞TCP/IP协议漏洞web应用安全漏洞开放端口的安全漏洞 2、系统安全加固方法 (1)、系统不显示上次登录的用户名 进入…...
Java面试题:阐述Java中的自动装箱与拆箱机制,以及使用它们时可能遇到的性能问题
在Java中,自动装箱(Autoboxing)和拆箱(Unboxing)是Java 5引入的特性,它们允许基本数据类型和对应的包装类之间的自动转换。 自动装箱 自动装箱是指将基本数据类型(如int、double等)…...
初识sql注入--手工注入
目录 可能使用的sql函数 入侵网站方式 1、文件上传漏洞 2、rce 3、sql注入 SQL注入 什么是sql注入 进行SQL注入 实验环境 开始实验(使用information_shema数据库) 1、进入靶场 2、报列数 下面来解释一下为什么要照上面SQL语句写 url编码 单…...
OceanBase 缺少 dbms_obfuscation_toolkit.md5 包函数的解决方案
因为 dbms_obfuscation_toolkit.md5 是一个 Oracle 不推荐继续使用的函数,所以 OceanBase 没有对其兼容,取而代之的是兼容了 dbms_crypto.hash,其用法详见这篇 KB 但是,并不是所有业务都接受修改源码,因为复杂系统里&…...
Java---类和对象第一节
目录 1.面向对象初步认识 1.1什么是面向对象 1.2面向对象和面向过程的区别 2.类的定义和使用 2.1简单认识类 2.2类的定义格式 2.3类的实例化 2.4类和对象的说明 3.this关键字 3.1访问本类成员变量 3.2调用构造方法初始化成员变量 3.3this引用的特性 4.对象的构造以…...
Zeller公式的应用:给定日期,确定周几
开篇 本篇文章依然是对于日期相关函数的实现。 问题概要 给定一个日期,返回为周几 思路分析 这个问题的思路只是对于Zeller公式的直接引用,不存在其他逻辑。公式详情可参考Zeller公式百科 代码实现 #include <stdio.h>// 根据Zeller公式计算 int …...
程序链接和运行 - 笔记
1 linux下程序a连接b.so后,运行时如何找到调用的函数 在Linux下,当程序A连接了动态链接库B(.so文件)后,在运行时,程序A会使用动态链接器(dynamic linker)来解析并加载动态链接库B中的函数。动态链接器会在系统中搜索动态链接库,并将它们加载到程序的地址空间中。 当…...
pyqt 按钮常用格式Qss设置
pyqt 按钮常用格式Qss设置 QSS介绍按钮常用的QSS设置效果代码 QSS介绍 Qt Style Sheets (QSS) 是 Qt 框架中用于定制应用程序界面样式的一种语言。它类似于网页开发中的 CSS(Cascading Style Sheets),但专门为 Qt 应用程序设计。使用 QSS&am…...
websevere服务器从零搭建到上线(一)|阻塞、非阻塞、同步、异步
文章目录 数据准备(阻塞和非阻塞)、数据读写(同步和异步)小总结(陈硕老师的总结) 知识拓展同步执行实例异步编程实例 八股 数据准备(阻塞和非阻塞)、数据读写(同步和异步) 无论是什么样的IO都包含两个阶段:数据准备和数据读写。 我们的网络IO…...
周末短途游成新风尚,家门口也能遇见诗与远方
如今生活节奏不断加快,长时间的长途旅行对很多人来说成了一种奢望,周末短途游便顺势走进大众生活,成为越来越多人放松身心的选择。不必提前很久规划行程,不用纠结复杂的交通攻略,甚至不用打包厚重的行李,只…...
Unity交通仿真入门:从零到一搭建十字路口红绿灯与车辆AI(附完整C#源码)
Unity交通仿真实战:十字路口红绿灯与车辆AI开发指南 在游戏开发和城市模拟领域,交通仿真一直是个充满挑战又极具实用价值的课题。想象一下,你正站在一个繁忙的十字路口,观察着红绿灯有节奏地变换,车辆井然有序地通过—…...
ATxmega时钟与GPIO配置详解:从原理到实战代码
1. 项目概述:从零开始认识ATxmage的时钟与GPIO最近在整理一些嵌入式开发的入门资料,发现很多刚接触ATxmage系列微控制器的朋友,拿到开发板后往往第一步就卡在了最基础的时钟配置和引脚操作上。这其实很正常,因为这两个模块是整个系…...
iOS种子下载终极指南:iTorrent让你的iPhone变身专业下载中心
iOS种子下载终极指南:iTorrent让你的iPhone变身专业下载中心 【免费下载链接】iTorrent Torrent client for iOS 16 项目地址: https://gitcode.com/gh_mirrors/it/iTorrent 还在为iPhone无法下载种子文件而烦恼吗?iTorrent这款专业的iOS种子客户…...
3分钟快速上手Inter字体:免费开源字体如何提升你的数字产品体验
3分钟快速上手Inter字体:免费开源字体如何提升你的数字产品体验 【免费下载链接】inter The Inter font family 项目地址: https://gitcode.com/gh_mirrors/in/inter Inter字体是一款专为屏幕显示设计的开源无衬线字体,凭借其出色的可读性和多语言…...
告别PS!用ImageMagick命令行5分钟搞定100张图片格式批量转换(附Windows/Mac安装避坑)
告别PS!用ImageMagick命令行5分钟搞定100张图片格式批量转换(附Windows/Mac安装避坑) 在数字内容爆炸式增长的今天,图片处理已成为开发者、设计师和内容运营人员的日常刚需。当面对上百张需要统一转换格式、调整尺寸的图片时&…...
如何免费定制你的Windows系统:5个简单步骤掌握Windhawk开源工具
如何免费定制你的Windows系统:5个简单步骤掌握Windhawk开源工具 【免费下载链接】windhawk The customization marketplace for Windows programs: https://windhawk.net/ 项目地址: https://gitcode.com/gh_mirrors/wi/windhawk 你是否觉得Windows系统缺少了…...
LeetCode 前K个高频元素题解
LeetCode 前K个高频元素题解 题目描述 给定一个数组,找到前 k 个高频元素。 示例: 输入:nums [1,1,1,2,2,3], k 2输出:[1,2] 解题思路 方法:堆 思路: 使用哈希表统计每个元素出现的次数。使用最小堆维护前…...
2026年DRAM价格暴涨194%深度分析:AI服务器跨界抢芯,苹果为何丧失议价特权?
一、194%涨幅:1978年以来最大单年涨幅 2026年DRAM价格全年涨幅预计达到194%——这是什么概念?比2017年比特币挖矿带动的内存涨价(+88%)还高出两倍,更是2023年AI爆发初期涨幅(+47%)的4倍以上。 涨价的核心驱动力不是"挖矿",而是AI服务器对内存的海量需求。 …...
《超图解趣味数学:微积分》与《图解微积分》哪本更适合小学生阅读
一、《超图解趣味数学:微积分》更适合小学生阅读 《超图解趣味数学:微积分》更适合小学生阅读,尤其适合在家长或教师引导下进行数学启蒙。 该书专为7-15岁青少年设计,内容以趣味漫画、生活场景和小品文形式展开,…...
