新闻详情

新闻详情

首页 / 资讯中心 / 详情

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

发布时间:2026/9/30 1:44:19来源:尧图网络
带头结点的链栈操作集(C语言版)
/*带头结点的链栈的操作集中包含的操作1、初始化链栈SStatus InitStack_LS(LStack S);2、销毁链栈SStatus DestroyStack_LS(LStack S);3、判断链栈S是否为空Status StackEmpty_LS(LStack S);4、清空链栈 SStatus 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 -1#define PERROR 2typedef int Status;// 数据元素的类型使用时需根据问题的需求定义。typedef int ElemType;typedef struct LSNode{ElemType data; // 数据域struct LSNode* next; // 指针域}LSNode,*LStack; // 结点和链栈类型// 1、初始化链栈SStatus InitStack_LS(LStack S){S (LSNode*)malloc(sizeof(LSNode)); // 为头结点申请空间if(SNULL){return OVERFLOW; // 申请失败返回}S-next NULL; // 为头结点的指针域赋初值return OK; // 初始化成功返回}// 2、销毁链栈SStatus DestroyStack_LS(LStack S){if(SNULL)return PERROR; // 参数合法性检验非法栈不存在不再执行栈的销毁操作LStack p S-next; // 声明临时指针变量LStack q p;while(p!NULL){p q-next;free(q);q p;}free(S); // 释放头结点所占空间S NULL; // 将 S至空避免指针悬挂}// 3、判断链栈S是否为空Status StackEmpty_LS(LStack S){if(SNULL)return PERROR; // 参数合法性检验非法返回参数错误if( S-next NULL ){return TRUE;}else{return FALSE;}}// 4、清空链栈 SStatus ClearStack_LS(LStack S){// 参数合法性检验非法返回参数错误if(SNULL) return PERROR;LStack p S-next; // 声明临时指针变量LStack q p;while(p!NULL){p q-next;free(q);q p;}S-next NULL; //头结点后继置空栈变为空栈 return OK;}// 5、入栈操作Status Push_LS(LStack S,ElemType e){if(SNULL)return PERROR; // 参数合法性检验非法返回参数错误LSNode *t;t (LSNode*)malloc(sizeof(LSNode)); // 为元素e分配新的结点空间if(t NULL) return OVERFLOW; // 分配失败返回t-data e;t-next S-next;S-next t; // 在栈顶位置插入新结点return OK;}// 6、出栈Status Pop_LS(LStack S,ElemType e){if(SNULL)return PERROR; // 参数合法性检验非法返回参数错误LSNode *t; // 临时保存要出栈的栈顶结点if(S-nextNULL)return ERROR; // 判断栈 S 是否是空栈t S-next; // t 指向栈顶元素结点e t-data; // 用 e 返回栈顶元素值供外界使用S-next t-next; // 删除栈顶元素结点栈顶指针S指向第二个结点free(t); // 释放原栈顶结点的空间return OK;}// 7、读取栈顶元素并用 e 返回Status GetTop_LS(LStack S, ElemType e){if(SNULL)return PERROR; // 参数合法性检验非法返回参数错误if(S-next NULL) return ERROR;e S-next-data;return OK;}int main(){int i, e, state;LStack S NULL;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 :state InitStack_LS(S);if(state OK){printf(初始化成功。\n);}else{printf(初始化失败\n);}break;case 2 :state DestroyStack_LS(S);if(state PERROR){printf(请确认参数合法化或者先执行栈的初始化操作\n);}else{printf(销毁栈成功。\n);}break;case 3 :state StackEmpty_LS(S);if(statePERROR){printf(请确认参数合法化或者先执行栈的初始化操作\n);}else if(stateTRUE){printf(链栈为空\n);}else if(stateFALSE){printf(链栈不为空!\n);}break;case 4 :state ClearStack_LS(S);if(state PERROR){printf(请确认参数合法化或者先执行栈的初始化操作\n);}else{printf(已为您清空链栈。\n);}break;case 5 :printf(请输入压入栈元素的值\n);scanf(%d,e);state Push_LS(S,e);if(state PERROR){printf(请确认参数合法化或者先执行栈的初始化操作\n);}else if(state OK){printf(元素 %d 成功入栈。\n,e);}else{printf(元素 %d 入栈失败\n,e);}break;case 6 :state Pop_LS(S, e);if(state PERROR){printf(请确认参数合法化或者先执行栈的初始化操作\n);}else if(state OK){printf(元素 %d 成功出栈\n,e);}else{printf(栈内没有元素不能执行出栈操作\n);}break;case 7 :state GetTop_LS(S,e);if(state PERROR){printf(请确认参数合法化或者先执行栈的初始化操作\n);}else if(state OK){printf(取出栈顶元素的值为%d\n,e);}else{printf(栈内没有元素不能执行读取栈顶元素操作\n);}break;}}while(i1i7);return 0;}
网站建设高端定制企业官网
RELATED

相关资讯

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

较早相关资讯

最新相关资讯

MiniGPT-4 训练全流程指南:两阶段对齐(Stage 1 预训练 + Stage 2 微调)从数据准备到实战配置 2026/9/30 2:29:27

MiniGPT-4 训练全流程指南:两阶段对齐(Stage 1 预训练 + Stage 2 微调)从数据准备到实战配置

人工智能大模型多模态计算机视觉NLP微调AI 应用 【免费下载链接】MiniGPT-4 Open-sourced codes for MiniGPT-4 and MiniGPT-v2 (https://minigpt-4.github.io, https://minigpt-v2.github.io/) 项目地址: https://gitcode.com/gh_mirrors/mi/MiniGPT-4 点击查看 免…

阅读更多 →
Nuclei 项目架构与开发指南:从构建测试、模板系统到扫描执行引擎的源码解析 2026/9/30 2:29:21

Nuclei 项目架构与开发指南:从构建测试、模板系统到扫描执行引擎的源码解析

网络安全应用安全漏洞扫描 【免费下载链接】nuclei Nuclei is a fast, customizable vulnerability scanner powered by the global security community and built on a simple YAML-based DSL, enabling collaboration to tackle trending vulnerabilities on the internet. I…

阅读更多 →
XLeRobot 从零搭建指南:17 个舵机、约 $660 预算造出你的双臂家庭移动机器人 2026/9/30 2:29:21

XLeRobot 从零搭建指南:17 个舵机、约 $660 预算造出你的双臂家庭移动机器人

XLeRobot 从零搭建指南:17 个舵机、约 $660 预算造出你的双臂家庭移动机器人 【免费下载链接】XLeRobot XLeRobot: Practical Dual-Arm Mobile Home Robot for $660 项目地址: https://gitcode.com/GitHub_Trending/xl/XLeRobot XLeRobot 是一个开源的双臂家…

阅读更多 →
重打包频频失败?先查 Apktool 的 apktool.yml 四个关键字段 2026/9/30 2:29:21

重打包频频失败?先查 Apktool 的 apktool.yml 四个关键字段

重打包频频失败?先查 Apktool 的 apktool.yml 四个关键字段 【免费下载链接】Apktool A tool for reverse engineering Android apk files 项目地址: https://gitcode.com/GitHub_Trending/ap/Apktool 重打包后的 APK 装到真机,图标丢失、布局空白…

阅读更多 →
我的学习路线 2026/9/30 2:29:21

我的学习路线

我的学习路线 C语言 数据结构 STM32入门教程 尚硅谷STM32 FreeRTOS

阅读更多 →
C语言内存四区:栈堆全局常量区原理与实战调试 2026/9/30 2:29:21

C语言内存四区:栈堆全局常量区原理与实战调试

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

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

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