静态链表的结构设计与主要操作功能的实现(初始化,头插,尾插,判空,删除,输出,清空,销毁)

news2024/9/9 1:39:37

目录

一.静态链表的结构设计

二.静态链表的结构设计示意图

三.静态链表的实现

四.静态链表的总结


一.静态链表的结构设计

typedef struct SNode
{
   int data;//数据
   int next;//后继指针(下标)
}SNode,SLinkList[MAXSIZE];


二.静态链表的结构设计示意图

image-20230611211905665.png


0:有效数据链的头节点;
1:空闲数据链的头节点;


三.静态链表的实现

//初始化
void InitList(SNode* ps)
{
	assert(ps != NULL);
	if (ps == NULL)
		return;
	//处理有效链表
	ps[0].next = 0;
	//处理空闲链表
	for (int i = 1; i < MAXSIZE; i++)
	{
		ps[i].next = i + 1;
	}
	ps[MAXSIZE - 1].next = 1;//1是空闲链表的表头
}

static   bool IsFull(SNode* ps)
{
	return ps[1].next == 1;
}

//头插
bool Insert_head(SNode* ps, int val)
{
	if (IsFull(ps))
	{
		return false;
	}

	//获取一个空闲节点
	int p = ps[1].next;
	//将空闲节点从空闲链表中剔除
	ps[1].next = ps[p].next;
	//放入数据
	ps[p].data = val;
	//将空闲节点插入到有效链表中
	ps[p].next = ps[0].next;
	ps[0].next = p;

	return true;
}

//尾插
bool Insert_tail(SNode* ps, int val)
{
	if (IsFull(ps))
	{
		return false;
	}

	//获取一个空闲节点
	int p = ps[1].next;
	//将空闲节点从空闲链表中剔除
	ps[1].next = ps[p].next;
	//放入数据
	ps[p].data = val;

	//找尾巴
	int q;
	for (q = 0; ps[q].next != 0; q = ps[q].next)
	{
		;
	}
	//将节点插入到有效链表中,p插入到q的后面
	ps[p].next = ps[q].next;
	ps[q].next = p;

	return true;
}

//判空
bool IsEmpty(SNode* ps)
{
	return ps[0].next == 0;//有效数据链表没有数据节点
}

//获取数据节点的个数
int GetLength(SNode* ps)
{
	assert(ps != NULL);
	if (ps == NULL)
		return -1;

	int count = 0;
	//遍历有效链表
	for (int p = ps[0].next; p != 0; p = ps[p].next)
	{
		count++;
	}
	return count;
}

//在ps中查找第一个key值,找到返回节点下标,没有找到返回-1;
int  Search(SNode* ps, int key)
{
	assert(ps != NULL);
	if (ps == NULL)
		return -1;

	//遍历有效链表
	for (int p = ps[0].next; p != 0; p = ps[p].next)
	{
		if (ps[p].data == key)
		{
			return p;
		}
	}

	return -1;
}

int  GetPrio(SNode* ps, int key)
{
	for (int p = 0; ps[p].next != 0; p = ps[p].next)
	{
		//if (ps[ps[p].next].data == key)//ok
		int q = ps[p].next;//q为p的后继
		if(ps[q].data==key)
		{
			return p;
		}
	}
	return -1;
}


//删除第一个val的值
bool DelVal(SNode* ps, int val)
{
	//获取val的前驱
	int p = GetPrio(ps, val);
	if (p < 0)
		return false;

	//将节点从有效数据链表中剔除
	int q = ps[p].next;
	ps[p].next = ps[q].next;

	//将节点添加到空闲链表中
	ps[q].next = ps[1].next;
	ps[1].next = q;

	return true;
}



//输出
void Show(SNode* ps)
{
	assert(ps != NULL);
	if (ps == NULL)
		return;
	for (int p = ps[0].next; p != 0; p = ps[p].next)
	{
		printf("%d  ", ps[p].data);
	}
	printf("\n");
}

//清空数据
void Clear(SNode* ps)
{
	assert(ps != NULL);
	if (ps == NULL)
		return;
	InitList(ps);
}

//销毁整个内存
void Destroy(SNode* ps)
{
	Clear(ps);
}


四.静态链表的总结


1.静态链表,利用顺序表模拟链表

2.静态链表包含两条链表,一条为有效数据链表,另一条为空闲节点链表

3.有效数据链表为带头结点的循环链表,且头节点在0号下标

4.空闲数据链表为带头结点的循环链表,且头节点在1号下标

5.静态链表的优点:和顺序表对比,插入删除不需要移动数据,O(1)

6.静态链表的优点:和链表对比,不需要频繁的创建和删除节点

7.静态链表的缺点:和顺序表对比,需要增加一个next

8.静态链表可以动态增长,满后扩容,将扩容的内存添加到空闲链表;

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

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

相关文章

2016年8月15日 Go生态洞察:Go 1.7版本发布

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页——&#x1f405;&#x1f43e;猫头虎的博客&#x1f390; &#x1f433; 《面试题大全专栏》 &#x1f995; 文章图文…

基于C#实现Dijkstra算法

或许在生活中&#xff0c;经常会碰到针对某一个问题&#xff0c;在众多的限制条件下&#xff0c;如何去寻找一个最优解&#xff1f;可能大家想到了很多诸如“线性规划”&#xff0c;“动态规划”这些经典策略&#xff0c;当然有的问题我们可以用贪心来寻求整体最优解&#xff0…

悦榕集团以养修概念持续引领健康出行

诚邀宾客共赴身、心、灵的回归之旅 【2023年11月22日&#xff0c;中国&#xff0c;上海】作为全球领先的独立酒店集团&#xff0c;悦榕集团一直以来始终秉承可持续发展理念&#xff0c;为宾客打造多层次的身、心、灵平衡之旅。出于对当代人生活方式变化和旅行需求的敏锐洞察&am…

2024免费MacBook清理工具CleanMyMac X4.15

CleanMyMac X 是一款专业的Mac清理软件&#xff0c;可智能清理mac磁盘垃圾和多余语言安装包&#xff0c;快速释放电脑内存&#xff0c;轻松管理和升级 Mac 上的应用。同时 CleanMyMac X 可以强力卸载恶意软件&#xff0c;修复系统漏洞&#xff0c;一键扫描和优化 Mac 系统&…

关闭vscode打开的本地服务器端口

vscode开了本地的一个端口“8443”当本地服务器端口&#xff0c;然后随手把VScode一关&#xff0c;后来继续做发现8443端口已经被占用了。   原来&#xff0c;即便关闭了编译器VScode&#xff0c;服务器依然是被node.exe运行着的。那这个端口怎么才能关掉呢&#xff1f;   …

首个央企量子云计算项目,中标!

6月29日&#xff0c;北京玻色量子科技有限公司&#xff08;简称“玻色量子”&#xff09;成功中标中国移动云能力中心“2023—2024年量子算法及光量子算力接入关键技术研究项目”&#xff0c;这是玻色量子继与移动云签订“五岳量子云计算创新加速计划”后&#x1f517;&#xf…

云计算时代来临,传统运维怎样做才能不被“杀死”?

据Forrester Research的数据显示&#xff0c;2021年全球公有云基础设施市场将增长35%&#xff0c;达到1200亿美元&#xff0c;云计算将继续在疫情复苏的过程中“占据中心位置”。 全球用于云计算的IT支出占比将持续增长&#xff0c;企业对于云计算开发人才需求紧迫&#xff0c…

甄知燕千云与SAP、EBS、TC、NS等应用深度集成,智能提单一键畅通,效能一键提升

当今全球化时代下&#xff0c;全球商业环境面临前所未有的机遇和挑战&#xff0c;企业需要持续的业务变革、组织优化来进行降本增效&#xff0c;企业管理软件已成为中小企业、大型企业数字化转型不可或缺的管理工具&#xff0c;企业内管理软件系统也越来越多。 为了适应当前企业…

11-@Transaction与AOP冲突解决

如题&#xff0c;最近碰到了一个问题&#xff0c;在public方法上添加Transaction没有生效&#xff0c;事务没有回滚。 我自己模拟了一个功能&#xff0c;向数据库表User里面插入用户数据。说一下代码背景&#xff0c; 数据库MySQL&#xff0c;持久化层Mybatis&#xff0c;项目使…

Matlab三角剖分插值问题分析

目录 前言 一、问题引入 二、一个例子 1.生成散点图 2.对数据进行剖分 3.点法式分析 三、最后结果 前言 上一篇文章感觉对三角剖分问题没有说清楚&#xff0c;这次专门对三角剖分问题再仔细说说。 一、问题引入 实际上这个问题是用来解决二维曲面插值问题的。 二维插值问题&…

GWAS结果批量整理:升级版算法TidyGWAS

TidyGWAS GWAS分析关键结果之一是显著性SNP位点的P值&#xff0c;通常多年份多地点多模型的GWAS分析将会产生很多结果文件&#xff0c;如何对这些数据进行整理&#xff1f; 汇总这些结果&#xff0c;并将显著性的位点或区域找出来&#xff0c;更加清晰的展示关键信息。 今天介…

文旅虚拟人IP:数字时代的传统文化推荐官

近几年&#xff0c;随着文旅虚拟人频“上岗”&#xff0c;虚拟人逐渐成为了文旅品牌的一种新颖的传统文化传播思路。 文旅品牌定制化推出虚拟人&#xff0c;本质原因是2023旅游业全面复苏&#xff0c;各文旅玩法同质化现象严重&#xff0c;在这样的境遇下&#xff0c;文旅品牌开…

AIGC专题报告:生成式人工智能用例汇编

今天分享的是AIGC系列深度研究报告&#xff1a;《AIGC专题报告&#xff1a;生成式人工智能用例汇编》。 &#xff08;报告出品方&#xff1a;德勤&#xff09; 报告共计&#xff1a;16页 生成式人工智能&#xff08;AI&#xff09;的兴起 生成式AI给人类文明创造了无限的可…

【【Linux 常用命令学习 之 一 】】

Linux 常用命令学习 之 一 打开终端之后的 我们会了解 所使用的 字符串含义 其中前面的 zhuxushuai 是 当前的用户名字 接下来的 zhuxushuai-virtual-machine 是 机器名字 最后的符号 $表示 当前是普通用户 输入指令 ls 是打印出当前所在目录中所有文件和文件夹 shell 操…

python-冒泡排序

冒泡排序 &#xff08;稳定&#xff09; O(n^2) (稳定&#xff1a;表示相等的数&#xff0c;相对位置会不会改变) 冒泡排序&#xff08;Bubble Sort&#xff09;是一种简单的排序算法&#xff0c;它通过多次遍历待排序的元素&#xff0c;比较相邻两个元素的大小并交换它们&…

周转箱与工具柜的智能化应用

在当今制造业激烈竞争的市场中&#xff0c;6S管理方法作为提高企业竞争力的有力工具&#xff0c;与精益生产中的周转箱和工具柜相结合&#xff0c;将为企业带来更大的优势。通过实施6S管理方法&#xff0c;企业不仅能够提高生产效率、降低成本&#xff0c;还能够改善产品质量、…

​ 一文带你了解多文件混淆加密

​&#x1f512; 一文带你了解多文件混淆加密 目录 &#x1f512; 一文带你了解 JavaScript 多文件混淆加密 ipaguard加密前 ipaguard加密后 ​ &#x1f512; 一文带你了解 JavaScript 多文件混淆加密 JavaScript 代码多文件混淆加密可以有效保护源代码不被他人轻易盗取。…

牛客 HJ106 字符逆序 golang实现

牛客题目算法连接 题目 golang 实现 package mainimport ("fmt""bufio""os" )func main() {str, _ : bufio.NewReader(os.Stdin).ReadString(\n)if len(str) 0 {return } else {newstr:""strLen:len(str)-1for i:strLen;i>0;i-…

小红书达人类型特点有哪些,创作形式总结!

小红书自带的社交电商属性&#xff0c;吸引了众多优秀的内容创作者和品牌达人。他们以不同的风格和主题&#xff0c;赢得了粉丝们的喜爱和关注。今天为大家分享下小红书达人类型特点有哪些&#xff0c;创作形式总结&#xff01; 1. 内容创作风格 我们从内容上来区分小红书达人类…

Android11编译第七弹:串口文件读写

问题&#xff1a;需要对SIM卡进行管理&#xff0c;支持APP切换SIM卡。此功能需要访问串口文件&#xff0c;并且对串口文件进行读写。APP操作串口文件/dev/ttyUSB1时&#xff0c;串口文件打开失败。 2023-11-23 10:59:44.092 14264-14264 MULTI_CARD_SerialHandle com.wellnkio…