新闻详情

新闻详情

首页 / 资讯中心 / 详情

不带头结点的链栈操作集(C语言版)

发布时间:2026/9/30 1:44:19来源:尧图网络
不带头结点的链栈操作集(C语言版)
/*不带头结点的链栈的操作集中包含的操作说明本版本在 main 函数里加入了 InitFlag 变量用以识别传递的实参链表未初始化时的野指针问题。正常的操作时这种情况应尽量避免本版本没有刻意在操作里增加参数 InitFlag目的是让操作更纯粹一些。在操作里加入则操作的参数合法性审核会更健壮。根据需要选择吧。1、初始化链栈SStatus InitStack_LS(LStack S);2、销毁链栈Svoid DestroyStack_LS(LStack S);3、判断链栈S是否为空Status StackEmpty_LS(LStack S);4、清空链栈 Svoid ClearStack_LS(LStack S);5、入栈操作Status Push_LS(LStack S,ElemType e);6、出栈操作Status Pop_LS(LStack S,ElemType e);7、读取栈顶元素并用 e 返回Status GetTop_LS(LStack S, ElemType e);*/#includestdio.h#includestdlib.h#define TRUE 1#define FALSE 0#define OK 1#define ERROR 0#define OVERFLOW -1typedef int Status;// 数据元素的类型使用时需根据问题的需求定义。typedef int ElemType;typedef struct LSNode{ElemType data; // 数据域struct LSNode* next; // 指针域}LSNode,*LStack; // 结点和链栈类型// 1、初始化链栈SStatus InitStack_LS(LStack S){S NULL;return OK;}// 2、销毁链栈Svoid DestroyStack_LS(LStack S){LStack p S;LStack q p;while(p!NULL){p q-next;free(q);q p;}S NULL; // 将 S 置空避免指针悬挂}// 3、判断链栈S是否为空Status StackEmpty_LS(LStack S){if( S NULL ){return TRUE;}else{return FALSE;}}// 4、清空链栈 Svoid ClearStack_LS(LStack S){LStack p S;LStack q p;while(p!NULL){p q-next;free(q);q p;}S NULL;return OK;}// 5、入栈操作Status Push_LS(LStack S,ElemType e){LSNode *t;t (LSNode*)malloc(sizeof(LSNode)); // 为元素e分配新的结点空间if(t NULL) return OVERFLOW; // 分配失败返回t-data e;t-next S;S t; // 在栈顶位置插入新结点return OK;}// 6、出栈Status Pop_LS(LStack S,ElemType e){LSNode *t;if(SNULL)return ERROR; // 判断栈 S 是否是空栈t S; // t 指向栈顶元素结点e S-data; // 用 e 返回栈顶元素值供外界使用S S-next; // 删除栈顶元素结点栈顶指针S指向第二个结点free(t); // 释放原栈顶结点的空间return OK;}// 7、读取栈顶元素并用 e 返回Status GetTop_LS(LStack S, ElemType e){if(S NULL) return ERROR;e S-data;return OK;}int main(){int i,e;LStack S;bool INITFLAG FALSE; // 栈是否进行初始化标志printf(1.初始化链栈\n);printf(2.销毁链栈\n);printf(3.判断链栈是否为空\n);printf(4.清空链栈\n);printf(5.将元素压入栈\n);printf(6.栈顶元素出栈\n);printf(7.取栈顶元素并返回\n);do{printf(请输入你要进行的操作\n);scanf(%d,i);switch(i){case 1 :if(InitStack_LS(S) OK){printf(初始化成功\n);INITFLAG TRUE;}else{printf(初始化失败\n);}break;case 2 :if(INITFLAG FALSE){printf(参数错误或栈已销毁\n);}else{DestroyStack_LS(S);printf(栈已成功销毁。\n);INITFLAG FALSE;}break;case 3 :if(INITFLAG FALSE){printf(栈不存在请先进行栈的初始化操作\n);}else{if(StackEmpty_LS(S) TRUE){printf(链栈为空\n);}else{printf(链栈不为空!\n);}}break;case 4 :if(INITFLAG FALSE){printf(栈不存在请先进行栈的初始化操作\n);}else{ClearStack_LS(S);printf(已为您清空链栈.\n);}break;case 5 :if(INITFLAG FALSE){printf(栈不存在请先进行栈的初始化操作\n);}else{printf(请输入要入栈的元素的值\n);scanf(%d,e);if(Push_LS(S,e) OK){printf(元素 %d 已成功入栈。\n,e);}else{printf(入栈失败\n);}}break;case 6 :if(INITFLAG FALSE){printf(栈不存在请先进行栈的初始化操作\n);}else{if(Pop_LS(S, e) OK){printf(元素 %d 已成功出栈。\n,e);}else{printf(栈内没有元素不能执行出栈操作\n);}}break;case 7 :if(INITFLAG FALSE){printf(栈不存在请先进行栈的初始化操作\n);}else{if(GetTop_LS(S,e) OK){printf(取出栈顶元素的值%d\n,e);}else{printf(栈内没有元素不能执行读取栈顶元素操作\n);}}break;}}while(i1i7);return 0;}
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

Open-LLM-VTuber 本地部署全记录:3 条命令跑通会语音对话的 Live2D 虚拟形象 2026/9/30 2:29:07

Open-LLM-VTuber 本地部署全记录:3 条命令跑通会语音对话的 Live2D 虚拟形象

Open-LLM-VTuber 本地部署全记录:3 条命令跑通会语音对话的 Live2D 虚拟形象 【免费下载链接】Open-LLM-VTuber Talk to any LLM with hands-free voice interaction, voice interruption, and Live2D avatar running locally across platforms 项目地址: https:/…

阅读更多 →
群晖硬盘兼容性解锁指南:第三方硬盘入库教程 2026/9/30 2:29:07

群晖硬盘兼容性解锁指南:第三方硬盘入库教程

群晖硬盘兼容性解锁指南:第三方硬盘入库教程 【免费下载链接】Synology_HDD_db Add your HDD, SSD and NVMe drives to your Synologys compatible drive database and a lot more 项目地址: https://gitcode.com/GitHub_Trending/sy/Synology_HDD_db Synolo…

阅读更多 →
HelloGitHub 第 122 期精读:39 个精选开源项目全解析与分类指南 2026/9/30 2:28:54

HelloGitHub 第 122 期精读:39 个精选开源项目全解析与分类指南

技术博客文档知识库 【免费下载链接】HelloGitHub :octocat: 分享 GitHub 上有趣、入门级的开源项目。Share interesting, entry-level open source projects on GitHub. 项目地址: https://gitcode.com/GitHub_Trending/he/HelloGitHub 点击查看 免费下载 本篇文章…

阅读更多 →
旧Mac升级macOS的OCLP从零上手指南 2026/9/30 2:28:54

旧Mac升级macOS的OCLP从零上手指南

旧Mac升级macOS的OCLP从零上手指南 【免费下载链接】OpenCore-Legacy-Patcher Experience macOS just like before 项目地址: https://gitcode.com/GitHub_Trending/op/OpenCore-Legacy-Patcher OpenCore Legacy Patcher(OCLP)让2007年及以后生产…

阅读更多 →
月底风险排查 2026/9/30 2:28:48

月底风险排查

月底结账关键期,税务风险到底藏在哪里? 每逢月末关账节点,都是企业财务的高压时刻:赶制报表、核对往来、归集成本、整理票据,海量工作集中爆发,多数企业只求 “把账做完、把税报上”,却极易忽略…

阅读更多 →
LlamaIndex 系列【41】数据连接器:LlamaParse、LiteParse 2026/9/30 2:28:48

LlamaIndex 系列【41】数据连接器:LlamaParse、LiteParse

文章目录1. 数据连接器1.1 概述1.2 集成包1.3 使用方式1.4 部分模块1.5 模块指南2. LlamaParse2.1 一分钟获取解析结果2.2 可用文档 API2.2.1 Parse2.2.2 Extract2.2.3 Index2.2.4 Classify2.2.5 Split2.3 代码示例3. LiteParse3.1 能力清单3.2 快速开始1. 数据连接器 1.1 概述…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉