3、静态链表

news/2024/9/25 21:24:13

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.ryyt.cn/news/59910.html

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

相关文章

终极 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 工作温…

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

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

[极客大挑战 2019]BabySQL

启动靶机熟悉的界面测试发现or被过滤且输入#号无法起到注释作用猜测本靶机考点过滤查询关键词语句or,union,select,and,by和注释符# 测试后查询关键词发现过滤只是单次过滤 可以使用aandnd,oorr,uunionnion等绕过过滤 而#则可以用urlencode编码格式变成%23绕过,接下来我们进行…

[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 方式实现的,不需要外部存储服务也可以正常运行:运行…