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

目录

一.静态链表的结构设计

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

三.静态链表的实现

四.静态链表的总结


一.静态链表的结构设计

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)//okint 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.hqwc.cn/news/213629.html

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

相关文章

【C++】:多态

朋友们、伙计们&#xff0c;我们又见面了&#xff0c;本期来给大家解读一下有关多态的知识点&#xff0c;如果看完之后对你有一定的启发&#xff0c;那么请留下你的三连&#xff0c;祝大家心想事成&#xff01; C 语 言 专 栏&#xff1a;C语言&#xff1a;从入门到精通 数据结…

部署项目时常用的 Linux 命令

目录 1 前言2 SSH登录命令3 SCP传输命令4 CP拷贝命令5 MV移动命令6 TAR解压命令7 DU查看文件夹/文件大小8 TAIL查看日志9 NOHUP后台运行10 结语 1 前言 在应用部署过程中&#xff0c;Linux命令是必不可少的工具。它们能够帮助我们管理文件、连接服务器、拷贝文件、查看日志以及…

TCP 重传、滑动窗口、流量控制、拥塞控制的剖析

TCP 是一个可靠传输的协议&#xff0c;那它是如何保证可靠的呢&#xff1f; 为了实现可靠性传输&#xff0c;需要考虑很多事情&#xff0c;例如数据的破坏、丢包、重复以及分片顺序混乱等问题。如不能解决这些问题&#xff0c;也就无从谈起可靠传输。 那么&#xff0c;TCP 是…

递归回溯剪枝-子集

LCR 079. 子集 - 力扣&#xff08;LeetCode&#xff09; 方法一 1. 决策树&#xff1a;对于决策树&#xff0c;思考的角度不同&#xff0c;画出的决策树也会不同&#xff0c;这道题可以从两个角度来画决策树。 2. 考虑全局变量的使用&#xff1a; 使用全局变量 List<List&…

2016年8月18日 Go生态洞察:Go 1.7版本二进制文件缩小

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

百分点科技入选《2023年央国企数字化升级研究报告》

近日&#xff0c;艾瑞咨询发布了《2023年央国企数字化升级研究报告》&#xff0c;报告总结了央国企数字化升级的方向和特点&#xff0c;并重点研究了基础平台及关键技术工具、通用及综合型应用、重要配套建设等方面。报告指出&#xff0c;数据治理是央国企数字化升级过程中的重…

某上市证券公司:管控文件交换行为 保护核心数据资产

客户简介 某上市证券公司成立于2001年&#xff0c;经营范围包括&#xff1a;证券经纪、证券投资咨询、证券承销与保荐、证券自营等。经过多年发展&#xff0c;在北京、上海、深圳、重庆、杭州、厦门等国内主要中心城市及甘肃省内各地市设立了15家分公司和80余家证券营业部。20…

实现外卖配送的智能化:外卖配送可视化技术解析

随着互联网技术的不断发展&#xff0c;外卖配送行业也迎来了快速发展的时代。而随之而来的是越来越多的用户对于外卖配送的质量和效率提出了更高的要求。如何让外卖配送更加可视化&#xff0c;成为了外卖配送行业亟需解决的问题。 外卖配送可视化是指通过技术手段&#xff0c;将…

2023亚太杯数学建模A题思路分析 - 采果机器人的图像识别技术

1 赛题 问题A 采果机器人的图像识别技术 中国是世界上最大的苹果生产国&#xff0c;年产量约为3500万吨。与此同时&#xff0c;中国也是世 界上最大的苹果出口国&#xff0c;全球每两个苹果中就有一个&#xff0c;全球超过六分之一的苹果出口 自中国。中国提出了一带一路倡议…

云原生技术演进之路-(云技术如何一步步演进的,云原生解决了什么问题?)

云技术如何一步步演进的&#xff1f; 云原生解决了什么问题&#xff1f; 物理设备 电脑刚被发明的时候&#xff0c;还没有网络&#xff0c;每个电脑&#xff08;PC&#xff09;&#xff0c;就是一个单机。 这台单机&#xff0c;包括CPU、内存、硬盘、显卡等硬件。用户在单机…

VMware vShere download

VMware 前言 VMware vSphere 是 VMware 的虚拟化平台,可将数据中心转换为包括 CPU、存储和网络资源的聚合计算基础架构。vSphere 将这些基础架构作为一个统一的运行环境进行管理,并为您提供工具来管理加入该环境的数据中心。 vSphere 的两个核心组件是 ESXi 和 vCenter Ser…

精益制造中的周转箱和工具柜优势

制造业&#xff08;Manufacturing industry&#xff09;是指机械工业时代利用某种资源&#xff08;物料、能源、设备、工具、资金、技术、信息和人力等&#xff09;&#xff0c;按照市场要求&#xff0c;通过制造过程&#xff0c;转化为可供人们使用和利用的大型工具、工业品与…