3、静态链表

news/2024/9/19 9:17:27/文章来源:https://www.cnblogs.com/xpp3/p/18412041

1、静态链表初始化

head指向-1代表当前为空链表,pool指向下一个可用空间(在数组下标为2的空间),2指向3,3指向4,最后的指向0表示没有下一个节点,以此链接起来。

2、实现代码

#include<stdio.h>
#include<malloc.h>#define MAX_SIZE 20typedef char ElemType;typedef struct StaticList{ElemType data;int      next;    
}StaticList;void initSList(StaticList* sList){int i = 0;//将数组链接起来 for(i;i < MAX_SIZE - 1;i++){sList[i].next = i + 1;}//数组下标为0的元素代表头结点//头结点指向-1代表后面没有元素,即为空链表 sList[0].next = -1;//指向 0 表示后续没有其他可用空间 sList[MAX_SIZE - 1].next = 0;}//获取数组下一个可用位置下标 
int malloc_node(StaticList* sList){//拿到数组中可用空间的下标 int pos = sList[1].next;if(sList[pos].next != 0){//说明当前数组还有未使用空间 //指向下一个未使用空间的下标 sList[1].next = sList[pos].next;}return pos;
}//头插法 
void insert_head(StaticList* sList,ElemType e){ //获取数组可用空间的元素下标 int i = malloc_node(sList);if(i == 0){printf("空间不足,申请节点空间失败.\n");return;}sList[i].data = e;if(sList[0].next == -1){//说明当前插入的是第一个元素 sList[i].next = -1;}else{//说明不是第一个元素,采用头插法插入 sList[i].next = sList[0].next;}//头节点指向插入的节点下标 sList[0].next = i;}//释放节点
void free_node(StaticList* sList,int pos){//重新链接数组 sList[pos].next = sList[1].next;//下标为 pos 的节点成为下一个可用空间 sList[1].next = pos;
} //删除头部
void delete_head(StaticList* sList){//获取第一个节点下标 int i = sList[0].next;if(i == -1){printf("当前链表为空,不可删除.\n");return;}//将第一个元素指向下一个元素下标给到头节点 sList[0].next = sList[i].next;//重新链接数组 
//    sList[i].next = sList[1].next;//删除的节点成为下一个可用空间 
//    sList[1].next = i; 
    free_node(sList,i);
} //打印链表 
void show_SList(StaticList* sList){int i = sList[0].next;while(i != -1){printf("%c->",sList[i].data);i = sList[i].next;}printf("NULL .\n");
}
int main(){StaticList staticList[MAX_SIZE];initSList(staticList);int i = 0;for(i;i <= 5;i++){insert_head(staticList,'a'+i);}show_SList(staticList);delete_head(staticList);show_SList(staticList);return 0;
}

 

 

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

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

相关文章

终极 Nginx 配置指南

转自:https://www.toutiao.com/article/7412444010868687412/?app=news_article_lite&timestamp=1726183629&use_new_style=1&req_id=20240913072708897999327556746BD261&group_id=7412444010868687412&share_token=d101eb4b-9c8a-45a3-82f8-a9020419cc3…

MBR30200PT-ASEMI开关电源专用MBR30200PT

MBR30200PT-ASEMI开关电源专用MBR30200PT编辑:ll MBR30200PT-ASEMI开关电源专用MBR30200PT 型号:MBR30200PT 品牌:ASEMI 封装:TO-247 安装方式:插件 批号:最新 最大平均正向电流(IF):30A 最大循环峰值反向电压(VRRM):200V 最大正向电压(VF):0.70V~0..90V 工作温…

docker配置springcloud项目到服务器

1.服务器安装部署docker镜像 2.创建镜像目录,如图所示 以其中一个服务为例,每个文件夹对应一个服务单元,每个文件夹中包含 sh,Dockerfile文件 3.编辑项目中的application-test(根据环境来定),如图: 4.配置Nacos,单独配置命名空间,增加配置文件,注意,组一定要是test,…

学习笔记 - 知识图谱的符号表示方法

学习笔记 - 知识图谱的符号表示方法 说明:首次发表日期:2024-09-13 个人阅读学习并摘录成笔记知识表示的相关名词定义以下内容摘录自 Knowledge Graphs Applied 2.3小节,然后AI翻译+人工润色。实体(Entities)---表示知识的核心概念,其他所有东西都是围绕其构建的。实体可…

[NLP/AIGC/GPT] RAG : 检索增强型生成技术,智能体的外挂知识库

1 概述 : RAG RAG 技术的概念、起源 大家每天都会看到各种 RAG 框架、论文和开源项目,也都知道 RAG (Retrieval-Augmented Generation) 是检索增强型生成。 但大家还记得 RAG 这个概念源自哪里吗? RAG 概念来自 Facebook AI Research在 2020 年的一篇论文:《** Retrieval-Au…

调研记录

最近做了一批调研,记录照片如下。

ArgoWorkflow教程(四)---Workflow 日志归档

上一篇我们分析了argo-workflow 中的 artifact,包括 artifact-repository 配置以及 Workflow 中如何使用 artifact。本篇主要分析流水线 GC 以及归档,防止无限占用集群中 etcd 的空间。1. 概述 因为 ArgoWorkflow 是用 CRD 方式实现的,不需要外部存储服务也可以正常运行:运行…

相对论:浅析可重构计算立足点

捏他下相对论~可重构计算和时空域概念高度关联,而相对论也是探讨时空域之间的关联关系“FPGA vs ASIC,孰强孰弱?” 这是在我心中埋藏很久的一个疑问。因为听到有言论说在 DNN 上,FPGA 被 ASIC 完爆,能耗和面积都不占优势;而又听到 FPGA 在其他比如量化领域仍有重要的应用…

jenkins远程启动任务--启用远程触发构建

一:前言 在执行Jenkins的项目构建的时候,一般都是通过web管理界面中的”构建”来执行项目构建操作,但是除此之外我们还可以通过项目配置中的”构建触发器”来触发构建操作,其中”构建触发器”有一种方式是通过配置令牌远程触发项目构建。二:设置用户token 打开当前登录用户…

2024年9月中国数据库流行度排行榜:TiDB重回前三,GoldenDB问鼎前五

9月墨天轮排行榜解读新鲜出炉!本月榜单前五变动较大,TiDB时隔半年重归第三,GoldenDB再次攀升跻身第五,此外亦有部分产品表现不俗,一起来看更多排名情况与解读!9月墨天轮数据社区的中国数据库流行度排行榜如约而至。除了冠亚两位,排名第三至第五的数据库产品均经历了位次…

7、Linux文件和目录管理

常规命令的格式注意:调侃删库操作,请勿执行! 命令规范命令:使用正确的命令名称。 空格:命令与选项、参数之间需要空格分隔。 大小写:大部分命令对大小写不敏感,但部分命令和参数敏感,需要注意。 顺序:大部分情况下顺序无影响,但少数命令有顺序要求。详细命令选项参考…