数据结构——静态链表(c语言笔记) - 实践

news/2025/9/26 20:50:30/文章来源:https://www.cnblogs.com/slgkaifa/p/19114214

数据结构——静态链表(c语言笔记) - 实践

1.什么是静态链表

静态链表(StaticList)就是用一个数组来模拟链表,每个元素是一个“节点”,里面有两部分:

data —— 存放数据

cur —— 存放“下一个节点”的数组下标(就像 next 指针)

额外规则:

下标 0 专门用来存储“链表头指针”。

下标 1 开始 是“备用链表”(空闲结点池)。

cur == -1 表示“没有下一个结点”(就像指针版的 NULL)。

cur == 0 用来表示备用链表已经空了,不能再分配。

2.静态链表代码与过程详解

main.cpp

#include"StaticList.h"
void main()
{
StaticList SL;
InitSList(SL);
for (int i = 0; i < 5; ++i)
{
Insert(SL, 'A' + i);
}
ShowSList(SL);
Delete(SL);
ShowSList(SL);
}

StaticList.h

#ifndef __STATICLIST_H__
#define __STATICLIST_H__
#include
#define MAX_SIZE 20
#define ElemType char
typedef struct ListNode
{
ElemType data;
int      cur;
}ListNode;
typedef ListNode StaticList[MAX_SIZE];
int Malloc_SL(StaticList& space);
void Free_SL(StaticList& sapce, int k);
void InitSList(StaticList& space);
void Insert(StaticList& space, ElemType x);
void Delete(StaticList& space);
void ShowSList(StaticList& space);
#endif //__STATICLIST_H__

StaticList.cpp

InitSList —— 初始化
void InitSList(StaticList& space)
{
for (int i = 1; i < MAX_SIZE - 1; ++i)
{
space[i].cur = i + 1;  // 让 1→2→3→... 串成一条备用链表
}
space[MAX_SIZE - 1].cur = 0;  // 最后一个指向 0,表示备用链表结束
space[0].cur = -1;            // 真正的链表是空的
}

举例:假设 MAX_SIZE = 6,初始化后数组状态如下:

下标datacur说明
0?-1表示链表为空
12空闲链表第1个结点,指向2
23空闲链表结点,指向3
34指向4
45指向5
50空闲链表结束

此时:

空闲链表 = 1→2→3→4→5→0

真实链表 = 空

Malloc_SL —— 分配结点
int Malloc_SL(StaticList& space)
{
int i = space[1].cur;          // 拿到备用链表的第一个
if (space[1].cur != 0)
space[1].cur = space[i].cur;  // 更新备用链表头
return i;  // 返回可用结点下标
}

举例:

当前空闲链表是 1→2→3→4→5→0

调用 Malloc_SL(space):

i = space[1].cur = 2,分配到下标 2。

更新 space[1].cur = space[2].cur = 3。

结果:备用链表变成 1→3→4→5→0,返回下标 2 给用户使用。

Free_SL —— 释放结点
void Free_SL(StaticList& space, int k)
{
space[k].cur = space[1].cur;  // 新释放的结点指向原备用链表头
space[1].cur = k;             // 让它成为新的备用链表头
}

举例:

当前空闲链表是 1→3→4→5→0

释放下标 2:

space[2].cur = space[1].cur = 3

space[1].cur = 2

新备用链表:1→2→3→4→5→0

Insert —— 插入节点(头插法)
void Insert(StaticList& space, ElemType x)
{
int i = Malloc_SL(space);
if (i == 0) { printf("申请节点空间失败.\n"); return; }
space[i].data = x;
if (space[0].cur == -1)    // 链表为空
{
space[i].cur = -1;
}
else                       // 链表非空
{
space[i].cur = space[0].cur;
}
space[0].cur = i;          // 更新头指针
}

举例:

假设 MAX_SIZE=6,此时空链表:space[0].cur = -1。

插入字符 'A':

分配到结点下标 2(假设)。

space[2].data = 'A',space[2].cur = -1。

更新 space[0].cur = 2。

链表:2→-1,对应内容:A。

再插入 'B':

分配下标 3。

space[3].data = 'B',space[3].cur = 2(指向原来的头)。

更新 space[0].cur = 3。

链表:3→2→-1,对应内容:B → A。

ShowSList —— 遍历打印
void ShowSList(StaticList& space)
{
int i = space[0].cur;
while (i != -1)
{
printf("%c-->", space[i].data);
i = space[i].cur;
}
printf("Nul.\n");
}

Delete —— 删除头节点
void Delete(StaticList& space)
{
int i = space[0].cur;          // 当前头结点
space[0].cur = space[i].cur;   // 头指针指向下一个
Free_SL(space, i);             // 释放旧的头结点
}

举例:

链表是 3→2→-1(内容:B→A)。

删除:

i = 3

更新 space[0].cur = space[3].cur = 2

释放结点 3 → 回到备用链表

新链表:2→-1(内容:A)。

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

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

相关文章

完整教程:【鸿蒙心迹】摸蓝图,打地基

完整教程:【鸿蒙心迹】摸蓝图,打地基pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Mon…

深圳专业网站制作网站推广方法 优帮云

戳蓝字“CSDN云计算”关注我们哦&#xff01;尽管最近新闻铺天盖地的“寒冬说”&#xff0c;由于我多年身处在稳定的大公司里&#xff0c;并没有太多的危机感。昨天大伙一起讨论年会表演什么节目&#xff0c;你演宁采臣&#xff0c;他男扮女装演小倩&#xff0c;大胖就演宁采臣…

北京网站制作报价国内军事新闻最新消息

在过往的功能中&#xff0c;有体现出在Excel上管理文件的极大优势&#xff0c;在文件的信息元数据中&#xff0c;有图片和音视频这两类特有的属性数据&#xff0c;此篇对过往功能的一个补充&#xff0c;特别增加了图片和音视频信息的遍历功能。使用场景在文件管理过程中&#x…

建站空间怎么选怎么做外贸企业网站

引用类型是一种数据结构&#xff0c;用于将数据和功能组织在一起&#xff0c;是一个对象 Object类型var obj new Object(); var obj {name: "xiaoming", age: 15}; 一般访问采用 alert(obj.name) Array类型数组 var arr new Array(n); n个项的数组 var arr new A…

电销如何介绍网站建设女孩学电子商务专业好就业吗

目录 一、线程同步 1.生产消费模型&#xff08;或生产者消费者模型&#xff09; 2.认识同步 &#xff08;1&#xff09;生产消费模型中的同步 &#xff08;2&#xff09;生产者消费者模型的特点 二、条件变量 1.认识条件变量 2.条件变量的使用 3.代码改造 三、基于阻…

网站设计 价格潍坊市城乡建设局网站

AR编程入门&#xff1a;解锁虚拟与现实交融的新世界 在数字化浪潮的推动下&#xff0c;增强现实&#xff08;AR&#xff09;技术正逐渐走进我们的日常生活&#xff0c;为我们带来前所未有的体验。对于初学者而言&#xff0c;AR编程可能显得既神秘又充满挑战。本文将从四个方面…

LuatOS Air780EPM 实现 HTTP 通信:从原理到代码实践

想用 LuatOS Air780EPM 开发板实现 HTTP 数据传输?本文从底层原理出发,逐步引导你完成 HTTP 客户端的搭建,并通过真实案例展示完整的开发流程。 一、HTTP 概述 1.1 什么是 HTTP? HTTP 全称为 HyperText Transfer P…

搜维尔科技:Senseglove Nova 2触觉手套:虚拟训练、VR/AR模拟和研究中的触觉反馈

用于研究的SenseGlove触觉反馈数据手套 使用市场上唯一一款结合了力反馈、振动触觉反馈和运动捕捉以及紧凑无线设计的触觉手套来收集数据。 图片 训练 传统培训成本高昂且风险高,要么需要重复资产,要么需要停产。在培…

深入解析:盟接之桥EDI软件:中国制造全球化进程中的连接挑战与路径探索

深入解析:盟接之桥EDI软件:中国制造全球化进程中的连接挑战与路径探索pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: …

【STM32H7】基于CubeMX从零开始搭建的HAL库工程模板(包含串口重定向和DSP库)

前言 Keil和CubeMX以及H7硬件支持包自行在网上搜索下载,都下最新版即可。 这里提供一个下载H7硬件支持包的网址:ARM 在这里我们会从零开始(除了下载安装),配置一个完整的方便管理的H7基本工程,下面是基本工程要达…

基于AWS Lambda的机器学习动态定价系统 CI/CD管道部署方案介绍 - 教程

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

雨灿网站建设网站建设之开展电子商务

4、正整数高精度 ​ 出现高精度的情况一般只有C会出现&#xff0c;python会无限制&#xff0c;java有大整数&#xff0c;所以基本上不用考虑&#xff0c;一般会出现四种情况 一个较大数A 一个较大数B一个较大数A - 一个较大数B一个较大数A * 一个数一个较大数A / 一个数 这里…

在Windows架构中安装Miniforge及python环境变量配置

在Windows架构中安装Miniforge及python环境变量配置pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas"…

搜维尔科技:Force Dimension Omega力反馈设备遥操作工业机器人

Force Dimension是力反馈设备和触觉技术的先锋,其力反馈设备以高精度和多样化著称。 Omega.3:是Omega系列中的一款,该系列是Force Dimension力反馈设备中最经典的产品,专为高精度触觉交互设计。 Sigma.7:是Force …

简单电商网站模板黑龙江建设网官方网站三类人员

回顾总结 hive表的类型 &#xff1a;内部表和外部表 删除内部表会删除表的所有数据 删除外部表只会删除表的元数据&#xff0c;hdfs上的行数据会保留 表的分区和分桶 本质都是对表数据的拆分存储 分区的方式 是通过创建不同的目录来拆分数据 &#xff0c;根据数据本身的内容最为…

汕头网站开发服务傲鸿网站建设

雅典学院&#xff08;拉斐尔&#xff09;来源&#xff1a;人机与认知实验室“你现在的气质里&#xff0c;藏着你走过的路&#xff0c;读过的书和爱过的人。"— 电影《卡萨布兰卡》里的一句话《追问人工智能》--刘伟 - 读书人视频如下&#xff1a;https://www.bilibili.com…

网站更换网址如何查找大理网站制作公司

原作者视频&#xff1a;【随机变量】【一数辞典】6正态分布_哔哩哔哩_bilibili 整个概率面积 S 1。 示例&#xff1a; 对称轴平均分μ90分&#xff0c;西格玛&#xff08;确定最高点的值&#xff0c;值越大越缓&#xff0c;越小分布曲线峰值越瘦高&#xff09;σ20分。

神奇的位运算——力扣136.只出现一次的数字 - 指南

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …