当前位置: 首页 > news >正文

数据结构(单链表(1))

前言

线性表中有着许多的结构,如顺序表链表。而单链表则是链表的最基础的一种形式,下面就让我们对其做一个了解。

概念

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

结构

我们可以将单链表的结构想象成火车的车厢:

淡季时⻋次的⻋厢会相应减少,旺季时⻋次的⻋厢会额外增加⼏节。只需要将⽕⻋⾥的某节⻋厢去掉/ 加上,不会影响其他⻋厢,每节⻋厢都是独⽴存在的。 在链表⾥,每节“⻋厢”是什么样的呢?

如图:

结点

与顺序表不同的是,链表⾥的每节"⻋厢"都是独⽴申请下来的空间,我们称之为“结点”。

结点的组成主要有两个部分:当前结点要保存的数据保存下⼀个结点的地址(指针变量)

中指针变量plist保存的是第⼀个结点的地址,我们称plist此时“指向”第⼀个结点,如果我们希望 plist“指向”第⼆个结点时,只需要修改plist保存的内容为0x0012FFA0

链表中每个结点都是独⽴申请的(即需要插⼊数据时才去申请⼀块结点的空间),我们需要通过指针变量来保存下⼀个结点位置才能从当前结点找到下⼀个结点。

性质

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

2、结点⼀般是从上申请的

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

结合C语言中结构体的相关知识,我们能得到链表的每个结点对应的结构体代码: 假设当前保存的结点为整型:

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

当我们想要保存⼀个整型数据时,实际是向操作系统申请了⼀块内存,这个内存不仅要保存整型数 据,也需要保存下⼀个结点的地址(当下⼀个结点为空时保存的地址为空)。

当我们想要从第⼀个结点⾛到最后⼀个结点时,只需要在当前结点拿上下⼀个结点的地址就可以了。

链表的打印

给定的链表结构中,我们该如何实现结点从头到尾的打印呢?

我们用一张图来解释:

实现单链表

下面我先给出实现单链表所必须的头文件,(SList.h)

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);

具体的实现我将在下一期进行详细说明,敬请期待!

http://www.lryc.cn/news/400195.html

相关文章:

  • STM32第十八课:SPIFlash
  • 如何使用IPython的并行计算能力处理大数据
  • 前端热门面试题二
  • Android TabLayout+ViewPager2如何优雅的实现联动详解
  • k8s快速部署一个网站
  • 期货量化交易客户端开源教学第四节——交易接口协议
  • M1000 4G蓝牙网关:高速稳定,赋能物联网新体验
  • 中国高端水果元宇宙
  • MySQL:库操作
  • struts2如何防止XSS脚本攻击(XSS防跨站脚本攻击过滤器)
  • SQL基础 | NOT NULL 约束介绍
  • C语言 ——— 实用调试技巧(Visual Studio)
  • 音频demo:使用faad2将AAC数据解码出PCM数据
  • 力扣 hot100 -- 多维动态规划
  • [misc]-流量包-wireshark-icmp
  • 探索性数据分析:使用Python与Pandas库实现数据洞察
  • 枚举的高阶用法之枚举里写方法以及注入spring的bean
  • 游戏开发面试题2
  • 华为机试题-单车道汽车通行时间-Java
  • 6-5,web3浏览器链接区块链(react+区块链实战)
  • C# 多态性
  • Visual Studio 安装程序无法执行修复或更新
  • C#与PLC通信——如何设置电脑IP地址
  • Milvus 核心设计(1) ---- 数据一致性的等级及使用场景
  • EasyCVR视频技术:城市电力抢险的“千里眼”,助力抢险可视化
  • 【Wamp】局域网设备访问WampServer | 使用域名访问Wamp | Wamp配置HTTPS
  • 采用自动微分进行模型的训练
  • k8s怎么配置secret呢?
  • 算法篇 滑动窗口 leetcode 长度最小的子数组
  • 数据库作业d8