news 2026/5/1 6:49:36

线性表之顺序栈

作者头像

张小明

前端开发工程师

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/4/23 12:28:25

基于单片机的智能电梯控制系统设计

系统总体设计概述 点击链接下载设计资料&#xff1a;https://download.csdn.net/download/qq_39020934/92091124 1.1 设计背景与研究意义 随着城市化进程的不断推进&#xff0c;高层建筑数量迅速增加&#xff0c;电梯已经成为现代建筑中最重要的垂直运输工具之一。电梯的运行…

作者头像 李华
网站建设 2026/4/27 4:35:14

软件测试面试喜欢问的linux文件操作命令总结

1切换目录 我们切换目录的命令是cd 但是在切换的时候&#xff0c;可以用两种形式&#xff0c;一种是绝对目录的形式切换&#xff0c;一种是相对目录的形式切换。 绝对路径&#xff1a;以 / 开头&#xff0c;或者 ~ 开头&#xff0c;分别表示根路径或者root路径。表示从根目录…

作者头像 李华
网站建设 2026/5/1 4:41:52

跨平台硬件直连:基于Flutter+鸿蒙的轻量化IoT解决方案

欢迎大家加入开源鸿蒙跨平台开发者社区&#xff0c;一起共建开源鸿蒙跨平台生态。 跨平台硬件直连&#xff1a;基于Flutter鸿蒙的轻量化IoT解决方案 在物联网开发中&#xff0c;跨平台兼容性与硬件直连能力至关重要。本方案结合Flutter的跨平台特性和鸿蒙系统的Sensor API&am…

作者头像 李华
网站建设 2026/4/30 7:46:39

飞控开发——熟悉uORB

基础讲解 基础术语 消息&#xff1a;数据格式模板&#xff08;类似 “语言语法”&#xff09;&#xff0c;定义数据字段&#xff08;如时间戳、具体参数&#xff09;&#xff0c;所有消息必须包含timestamp&#xff08;时间戳&#xff09;字段主题&#xff1a;消息的 “通信通…

作者头像 李华
网站建设 2026/5/1 4:42:44

煤层卸压开采瓦斯越流以及塑性变形 煤层工作开挖过程,会引起邻近煤岩层应力、变形场发生变化,以及...

煤层卸压开采瓦斯越流以及塑性变形 煤层工作开挖过程&#xff0c;会引起邻近煤岩层应力、变形场发生变化&#xff0c;以及引起临近煤层卸压&#xff0c;从而达到保护层开挖目的。 本模型根据煤岩层之间的位置关系&#xff0c;建立瓦斯流动场、煤岩弹塑性变形场&#xff0c;供大…

作者头像 李华