当前位置: 首页 > news >正文

线性表之顺序栈

  • 栈是限制在一端进行插入操作和删除操作的线性表(俗称堆栈)
  • 允许进行操作的一端称为”栈顶“
  • 另一固定端称为”栈底“
  • 当栈中没有元素时称为”空栈“
  • 特点:后进先出(LIFO)或先进后出

  • 顺序栈是顺序表的一种,具有顺序表同样的存储结构,由数组定义,配合用数组下标表示的栈顶指针top(相对指针)完成各种操作
typedefintdata_t;/*定义栈中数据元素的数据类型*/typedefstruct{data_t*data;/*用指针指向栈的存储空间*/intmaxlen;/*当前栈的最大元素个数*/inttop;/*指示栈顶位置(数组下标)的变量*/}sqstack;/*顺序栈类型定义*/

顺序栈

功能代码

#include<stdio.h>#include<stdlib.h>#include<string.h>#include"sqstack.h"sqstack*stack_create(intlen){sqstack*s;if((s=(sqstack*)malloc(sizeof(sqstack)))==NULL){printf("malloc sqstack failed\n");returnNULL;}if((s->data=(data_t*)malloc(len*sizeof(data_t)))==NULL){printf("malloc data failed\n");free(s);returnNULL;}memset(s->data,0,len*sizeof(data_t));s->maxlen=len;s->top=-1;returns;}intstack_push(sqstack*s,data_tvalue){if(s==NULL){printf("s is NULL\n");return-1;}if(s->top==s->maxlen-1){printf("stack is full\n");return-1;}s->top++;s->data[s->top]=value;return0;}intstack_empty(sqstack*s){if(s==NULL){printf("s is NULL\n");return-1;}return(s->top==-1?1:0);}intstack_full(sqstack*s){if(s==NULL){printf("s is NULL\n");return-1;}return(s->top==s->maxlen-1?1:0);}data_tstack_pop(sqstack*s){s->top--;return(s->data[s->top+1]);}data_tstack_top(sqstack*s){return(s->data[s->top]);}intstack_clear(sqstack*s){if(s==NULL){printf("s is NULL\n");return-1;}s->top=-1;return0;}intstack_free(sqstack*s){if(s==NULL){printf("s is NULL\n");return-1;}if(s->data!=NULL){free(s->data);}free(s);return0;}

头文件

typedefintdata_t;typedefstruct{data_t*data;intmaxlen;inttop;}sqstack;sqstack*stack_create(intlen);intstack_push(sqstack*s,data_tvalue);intstack_empty(sqstack*s);intstack_full(sqstack*s);data_tstack_pop(sqstack*s);data_tstack_top(sqstack*s);intstack_clear(sqstack*s);intstack_free(sqstack*s);

测试文件

#include<stdio.h>#include"sqstack.h"intmain(intargc,constchar*argv[]){sqstack*s;s=stack_create(100);if(s==NULL)return-1;stack_push(s,10);stack_push(s,20);stack_push(s,30);stack_push(s,40);while(!stack_empty(s)){printf("pop: %d \n",stack_pop(s));}stack_free(s);return0;}
http://www.hn-smt.com/news/110168/

相关文章:

  • 重生归来,我要成功 Python 高手--day44 迁移学习 Fasttext 文本分类 词向量
  • 3D 创作工具 Cinema4D 2025官方下载安装教程(含核心功能+入门实操+常见问题)
  • 【第57套】一天两套,继续冲刺!
  • SMB、FTP、MySQL... 配置不当,即是漏洞
  • JSON 与 MongoDB:直存对象的便利与隐性代价
  • PSD-95抗体:如何为缺血性脑卒中治疗开启神经保护新纪元?
  • 警惕Vibe Coding ,Agentic Coding认知升级与实践避坑指南
  • 基于MATLAB2018b的“10kV级联H桥SVG无功补偿装置”仿真研究:12个子模块与两层...
  • 别再迷信Agent了! Claude大佬一语道破:Agent太“聪明”反而不专业,真正的未来是“Skills”!
  • 信捷XDPLC与台达DT330温控器:多设备通讯启停控制程序及实用指南
  • 「码同学」2025VIP性能测试课程
  • 34、用 awk 实现拼写检查器
  • 4四层电梯组态王6.53和三菱FX系列PLC的程序3(连接PLC实物运行),带io表
  • 7岁孩子弱视恢复,亲测有效的三大方法分享!
  • 48、Unix知识综合解析
  • 基于comsol的多层冻土地基冻涨模型研究:低温热流固三场耦合效应的固体力学模拟
  • 鸿蒙学习实战之路 - 应用间链接最佳实践
  • 【AI革命】程序员必学!大模型如何“创造“虚拟细胞?附完整代码实现教程
  • UDP 协议详解与 Qt 实战应用
  • 8、深入解析Nagios安装与配置:从基础到高级
  • [ACM]2026年大数据应用与信息化教育国际学术会议 (ICBDIE 2026)
  • 【小白必看】当AI开始“思考“:大模型如何彻底颠覆你的编程世界?
  • Swagger UI 自定义请求头:从用户配置到请求注入的完整流程解析
  • 11、Nagios配置自动化工具指南
  • 【紧急必读】R Shiny多模态更新卡顿?这4个性能优化方案必须掌握
  • 太月香学新书《中国传统香学》首发亮相
  • 【Q#调试权威手册】:微软官方未公开的4个调试利器全曝光
  • 为什么你的GraphQL API不够灵活?PHP字段别名设计的4个致命误区
  • IntelliJ IDEA 安装 pmd-idea-1.9.0.zip 插件详细教程
  • 【纤维协程调度优化指南】:掌握任务优先级分配的5大核心策略