news 2026/6/9 3:31:08

线性表之顺序栈

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
线性表之顺序栈
  • 栈是限制在一端进行插入操作和删除操作的线性表(俗称堆栈)
  • 允许进行操作的一端称为”栈顶“
  • 另一固定端称为”栈底“
  • 当栈中没有元素时称为”空栈“
  • 特点:后进先出(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;}
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/9 17:21:12

激光下料错误刀路分享1

绿色的已经割好了现在走青色的红色的已经形成环导致零件落下最后一刀割不到修改方法&#xff1a;青色刀路反向

作者头像 李华
网站建设 2026/6/9 17:22:25

基于三维卷积神经网络与门控循环单元结合注意力机制的预测模型:数据驱动负荷预测、PM2.5预测及...

三维卷积神经网络和门控循环单元加上注意力机制&#xff08;3D CNN-GRU-Att&#xff09;的结合上构建的&#xff0c;此代码可以运用到负荷预测、PM2.5预测、光伏预测中等等&#xff0c;只需要替换你自己的数据即可跑所有实验图都是代码跑出来的江湖上一直流传着时空预测的传说&…

作者头像 李华
网站建设 2026/6/9 18:52:26

信号老司机的日常离不开时频图这玩意儿,毕竟光看时域波形就像看天书,频域谱线又丢失了时间信息。今天手把手整几个MATLAB时频分析代码,从入门到入土(误)

时频图程序(小波时频&#xff0c;短时傅里叶变换&#xff0c;s变换) MATLAB程序先搞个模拟信号热热身&#xff1a; fs 1000; % 采样率别太小气 t 0:1/fs:1; f1 20; f2 100; signal sin(2*pi*f1*t).*(t<0.5) sin(2*pi*f2*t).*(t>0.5); % 分段信号 noise 0.5*randn(…

作者头像 李华
网站建设 2026/6/7 7:32:39

sklearn函数总结十一 —— 随机森林

纯手打&#xff0c;代码整理中&#xff0c;持续更新中^-^序号延用总结十18.1 随机森林算法核心思想随机森林属于集成学习中的 Bagging 类型。“森林”&#xff1a;由多棵决策树构成的“森林”&#xff0c;最终的预测结果由所有决策树共同决定&#xff08;例如&#xff0c;通过投…

作者头像 李华
网站建设 2026/6/9 6:13:40

直播回放 | IDMP 无问智推技术详解

在生产车间、设备集控室、运维指挥中心&#xff0c;每天都有成千上万条数据实时上传&#xff1a;温度、压力、转速、电流……这些数据&#xff0c;被系统精准地记录了下来&#xff0c;也被整整齐齐地存进了数据库。但真正的问题是&#xff1a; &#x1f50d; 谁在关注这些数据…

作者头像 李华