当前位置: 首页 > 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.jsqmd.com/news/94910/

相关文章:

  • Fedora , Linux 创始人 Linus 的选择 —— 目前他生活在加拿大
  • 基于springboot的药店药品管理系统的设计与实现(源码+lw+远程部署)
  • groovy基础了解
  • 深度解析 Google JAX 全栈:带你上手开发,从零构建神经网络
  • 基于python的药店药品管理系统的设计与实现(源码+lw+远程部署)
  • 2026毕设ssm+vue基于高校新生报到论文+程序
  • 金融数据分析-申万行业数据分析系统(Python+Streamlit)
  • 百度搜索不到的Qwen3-VL-8B安装包获取渠道揭秘
  • 影刀使用全局附值控制操作次数
  • CTF —— 网络安全大赛!从入门到精通,收藏这篇就够了
  • ENSP抓包分析Qwen3-VL-30B API通信协议细节
  • Stm32_2:蜂鸣器、按键、继电器
  • Qwen3-8B vs 其他8B模型:逻辑推理能力全面对比测评
  • 【优化分配】基于遗传算法GA求解机场登机口分配优化问题(目标函数:油耗 靠桥率)附Matlab代码
  • 【2025最新】网络安全从入门到精通(超详细)学习路线!
  • 2026毕设ssm+vue基于高校教师个人主页网站的设计与实现论文+程序
  • 基于FLUX.1-dev的文生图技术博客:提升提示词遵循度的秘诀
  • Hadoop与Python:PySpark大数据处理指南
  • 又一个绿色神器的蓝屏修复工具
  • Comsol微环谐振腔与环形波导耦和:对比波束包络与波动光学两个模块
  • 千匠供应链商城系统:AI赋能、灵活部署,全力助推产业互联网平台建设与发展
  • leetcode56.合并区间
  • C#字典操作全攻略与var定义变量
  • 基于python的房产交易服务平台的设计与实现(源码+lw+远程部署)
  • 2024年提示工程架构师必看:用户参与研究的最新趋势,提升提示设计效果
  • 将结果按字典或元组格式输出
  • Informed RRT*实现椭圆启发式采样
  • 千匠网络B2B商城系统:赋能渠道数字化升级的全链路智能解决方案
  • 2026毕设ssm+vue基于防返贫政策的贫苦户信息管理系统论文+程序
  • 整体设计 之28 整体设计 架构表表述总表的 完整程序(之27 的Q268 )(codebuddy)