【数据结构】【线性表】静态链表(附C语言源码)

news/2024/11/16 18:34:41 标签: 数据结构, 链表, c语言

静态链表

链表是物理结构为链式的线性表,其每个结点的存储位置不一定是连续的,每个结点依靠结点元素的中的指针线性相连。但有时候为了方便管理内存空间,会将链表的各个结点存储空间放在一块,其实现方式类似于数组,只不过由传统的数据类型改为结构体类型。

#include MaxSize 20;
typedef struct {//定义单链表结点类型
	EleType deta;//每一个结点存放一个数据元素
	int next;//指向下一个结点所在数组位置
}SLinkList[MaxSize];
该结构体定义了一个新的东西,名字为:SLinkList,它表示一个结构体数组,数组的每个元素都等同于该结构体
typedef struct LNode{//定义单链表结点类型
	EleType deta;//每一个结点存放一个数据元素
	struct LNode *next;//指针指向下一个结点
}LNode,*LinkList;
这是原来的单链表结构体的定义

[!静态链表结构体和普通链表结构体的比较]

  • 将结构体指针换成了整型变量。静态链表不再通过结构体指针去链接结点,而是通过整型变量去表示结点之间的关系。
  • 重定义将单个结构体换成了结构体数组。在进行结构体的重定义时,不再定义为一个结构体,而是定义成一个结构体数组用于存储链表,使得链表的物理空间从分散的变成了一整块。
//原有的结构体只定义了一个结构体,原有结构体重定义等效于:
typedef struct LNode LNode,*LinkList;
//静态链表的结构体定义了一个结构体数组,静态链表结构体重定义等效于:
typedef struct Node SLinkList[MaxSize];定义了一个长度为Maxsize的Node类型的数组
静态链表的基本操作

一段连续的空间,用数组下标去代替指针有天然的优势。和其他的链表相比,静态链表最重要的特点就是结点的结构体指针换成了整型变量。因此在程序的设计上最重要的也是这一部分。首先要解决一个问题:指针的空,用整型变量如何表示?其实很简单,因为这里的整型变量表示的是结构体数组的下标,下标要是非负数才有实际意义,因此我们可以用负数去表示指针的NULL。
初始化静态链表

//初始化静态链表
bool InitStaticList(SLinkList &L){
	if(MaxSize<1)//判断链表长度是否合法
		return false;//链表长度不合法,初始化失败
	L[0]->next=-1;//初始化头结点的next为-1,表示空
	for(int i=1;i<MaxSize-1;i++){
		L[i]->next=-2;//初始化剩余结点的next为-2,表示空或已删除
	}
	return true;
}

静态链表的插入

插入分为按位序插入和指定结点的前插和后插,无论是哪种插入无非就做两件事:
	1.找位置,即找数组中的空结点,存入数据元素。
	2.修改next或prior,找到其前驱结点或后继节点修改对应指针

	这里需要注意的是静态链表如何判断空结点,可以根据结点的next的数字来判定,例如-1表示该结点为头结点,-2表示该结点为空,-3表示该结点不为空但为表尾结点等

静态链表的删除

插入分为按位序删除和指定结点删除,无论是哪种删除无非就做三件事:
	1.找到该结点及其前驱结点或后继结点。
	2.修改前驱结点或后继结点的指针,使其相连。
	3.释放删除结点的空间

静态链表的一些比较

  • 和其他链表相比,静态链表用数组实现链表,空间连续;但空间固定,不能随机存取
  • 和顺序表相比,静态链表的操作不需要大量移动元素

http://www.niftyadmin.cn/n/5754508.html

相关文章

World of Warcraft [WeakAuras]Barney Raid Kit - Collapsing Star Indicator

https://wago.io/BarneyCS 黄色数字表示需要修的血量。 绿色数字表示停止修血。 红色数字表示修血过量&#xff0c;以及该坍缩星将在大爆炸读条结束前多少秒爆炸。 Numbers in yellow means damage required. Numbers in green means HP is good, dont damage anymore. Numbers…

ES数据迁移方式

elasticdump 需要安装elasticdump &#xff0c;node插件 #!/bin/bashindexes("index1" "index2")for index in "${indexes[]}" doecho "backup ${index} start"#--type: 迁移类型&#xff0c;默认为 data&#xff0c;表明只迁移数据…

python:用 sklearn 构建 K-Means 聚类模型

pip install scikit-learn 或者 直接用 Anaconda3 sklearn 提供了 preprocessing 数据预处理模块、cluster 聚类模型、manifold.TSNE 数据降维模块。 编写 test_sklearn_3.py 如下 # -*- coding: utf-8 -*- """ 使用 sklearn 构建 K-Means 聚类模型 "&…

【提高篇】3.3 GPIO(三,工作模式详解 上)

目录 一,工作模式介绍 二,输入浮空 2.1 输入浮空简介 2.2 输入浮空特点 2.3 按键检测示例 2.4 高阻态 三,输入上拉 3.1 输入上拉简介 3.2 输入上拉的特点 3.3 按键检测示例 四,输入下拉 4.1 输入下拉简介 4.2 输入下拉特点 4.3 按键检测示例 一,工作模式介绍…

用redis的zset实现日榜,周榜,月榜

思路&#xff1a; 1.初始化一个月的数据&#xff1a; /*** 初始化一个月数据*/Testpublic void initMonthData(){//计算当前时间小时的keylong hourSystem.currentTimeMillis()/(1000*60*60);for(int i1;i<24*30;i){String key"W_hour"(hour-i);Random random new…

LabVIEW大数据处理

在物联网、工业4.0和科学实验中&#xff0c;大数据处理需求逐年上升。LabVIEW作为一款图形化编程语言&#xff0c;凭借其强大的数据采集和分析能力&#xff0c;广泛应用于实时数据处理和控制系统中。然而&#xff0c;在面对大数据处理时&#xff0c;LabVIEW也存在一些注意事项。…

博睿数据登顶中国应用性能管理及可观测性APMO市场份额第一!

近日&#xff0c;全球领先的IT市场研究和咨询公司IDC发布《中国IT智能运维软件产品市场跟踪报告&#xff0c;2024H1》&#xff0c;此次IDC将原有IT统一运维软件报告即ITUO报告升级为IT智能运维软件报告即ITAO报告&#xff0c;以反映越来越多的运维软件在不断加持AI能力&#xf…

LeetCode74. 搜索二维矩阵(2024冬季每日一题 6)

给你一个满足下述两条属性的 m x n 整数矩阵&#xff1a; 每行中的整数从左到右按非严格递增顺序排列。每行的第一个整数大于前一行的最后一个整数。 给你一个整数 target &#xff0c;如果 target 在矩阵中&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。…