数据结构——5.顺序栈
前言链表、顺序表是常规线性表而栈与队列属于操作受限的特殊线性表。本章主要讲解栈的基础概念并实现动态扩容的顺序栈。一、栈基本概念栈定义栈是插入、删除操作受到限制的线性表所有数据操作仅能在同一端完成。相关术语栈顶允许执行插入、删除操作的一端。栈底不允许增删操作的另一端。空栈内部不包含任何数据元素的栈。核心特性栈遵循后进先出Last In First OutLIFO规则最后存入的数据会最先被取出。基本操作名称入栈 / 压栈向栈中插入元素类比子弹装入弹夹。出栈 / 弹栈从栈中删除元素类比子弹从弹夹射出二、代码实现#define _CRT_SECURE_NO_WARNINGS #include stdio.h #include stdlib.h #include string.h #include assert.h #include memory.h #include SeqStack_1.h //1.初始化函数 void Init_SeqStack(SeqStack* psq) { assert(psq ! NULL); psq-base (ELEMTYPE*)malloc(STACK_INIT_SIZE * sizeof(ELEMTYPE)); if (psq-base NULL) exit(EXIT_FAILURE); psq-top 0; psq-stacksize STACK_INIT_SIZE; } //2.入栈 bool Push(SeqStack* psq, ELEMTYPE val) { //0. assert(psq ! NULL); //1.判满。如果满就扩容 if (Full(psq)) { Increase(psq); } //2.直接给top下标格子进行插入值val psq-base[psq-top] val;// //3.更新一下top栈顶指针的指向 psq-top; return true; } //3.出栈 bool Pop(SeqStack* psq) { //0 assert(psq ! NULL); //1.判空 if (Empty(psq)) return false; //2.直接将top指针往后走一下认为刚才的最后一个元素刚才的栈顶元素是无效值 psq-top--; return true; } //4.获取栈顶元素值只瞄一眼栈顶最新元素值是多少别动他 ELEMTYPE Top(SeqStack* psq) { //0 assert(psq ! NULL); //1.判空 if (Empty(psq)) exit(EXIT_FAILURE); //2.获取栈顶元素值 return psq-base[psq-top - 1];//要栈顶指针的下一个指向 } //5.扩容 void Increase(SeqStack* psq) { ELEMTYPE* tmp (ELEMTYPE*)realloc(psq-base, psq-stacksize * sizeof(ELEMTYPE) * 2); if (tmp ! NULL) psq-base tmp; psq-stacksize * 2; } //6.判空 bool Empty(SeqStack* psq) { //0 assert(psq ! NULL); return psq-top 0; } //7.判满 bool Full(SeqStack* psq) { // assert(psq ! NULL); return psq-top psq-stacksize; } //8.打印(用来测试的) void Show(SeqStack* psq) { assert(psq ! NULL); for (int i 0; i psq-top; i) { printf(%d , psq-base[i]); } printf(\n); } //9.清空 void Clear(SeqStack* psq) { assert(psq ! NULL); psq-top 0; } //10.销毁 void Destroy(SeqStack* psq) { assert(psq ! NULL); free(psq-base); psq-base NULL; psq-stacksize 0; psq-top 0; } int main() { SeqStack st; Init_SeqStack(st); Push(st, 12); Push(st, 34); Push(st, 56); Show(st); Pop(st); Show(st); return 0; }三、运行结果四、代码说明本实现为动态顺序栈空间不足时会自动扩容不受初始容量限制。top为栈顶标记始终指向下一个待入栈的位置空栈时top 0。操作规范所有接口均加入断言校验防止空指针访问内存分配失败直接终止程序保证代码健壮性。区分Clear和DestroyClear仅清空元素保留内存Destroy彻底释放动态数组内存。

相关新闻

Codex Skill 安装基础以及常用 Skill 使用

Codex Skill 安装基础以及常用 Skill 使用

Codex Skill 安装基础以及常用 Skill 使用Codex Skill 安装基础以及常用 Skill 使用前言Codex 简介Codex 基础设置Codex Skill 是什么环境准备1. 安装 Node.js2. 检查 Skills CLI查找 Skill安装 Skill参数说明检查是否安装成功常用 Skill 说明1. find-skills2. skill-creator3.…

2026/10/11 1:31:30 阅读更多 →
基于SVM与PSO的生物质气化过程建模与优化

基于SVM与PSO的生物质气化过程建模与优化

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

2026/10/11 1:30:30 阅读更多 →
RK3588系列选型指南:从接口、算力到散热量产的全流程解析

RK3588系列选型指南:从接口、算力到散热量产的全流程解析

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

2026/10/11 1:30:30 阅读更多 →

最新新闻

Makefile核心魔法:目标、依赖与时间戳,实现增量构建

Makefile核心魔法:目标、依赖与时间戳,实现增量构建

我先说个真事儿:之前我维护一份项目代码,光是编译命令就有一长串,每次改完代码都要在终端里翻历史记录找出那条gcc。后来有同事嫌麻烦,干脆写了个shell脚本,把所有目标文件删掉再重新编译,美其名曰“每次构…

2026/10/11 4:43:21 阅读更多 →
OpenAI在ChatGPT和Codex中加入文本水印功能

OpenAI在ChatGPT和Codex中加入文本水印功能

OpenAI宣布在ChatGPT和Codex中推出一种隐形的、机器可读的文本水印技术,但目前这项功能仅面向欧盟地区用户开放。OpenAI表示,其名为textGrain的文本水印技术"达到或超过"了其他类似方案的表现,比如谷歌DeepMind为文本设计的SynthID…

2026/10/11 4:43:21 阅读更多 →
瑞士薪资+东南亚生活:全球远程测试岗位的薪酬逻辑与实操指南

瑞士薪资+东南亚生活:全球远程测试岗位的薪酬逻辑与实操指南

这份稀缺的工作形态,背后其实是全球远程协作和薪酬体系的一次重构。作为长期在一线做测试、也带过跨国测试团队的从业者,我见过太多人只盯着“高薪”两个字,却没想明白这个模式里真正值钱的是什么,也没看清背后需要付出的代价。今…

2026/10/11 4:43:21 阅读更多 →
Android天气源码精讲:Gradle同步与Retrofit网络请求

Android天气源码精讲:Gradle同步与Retrofit网络请求

简介:面向移动开发初学者的Android Studio天气预报小程序完整源码包,基于Retrofit与Gson实现网络请求,覆盖项目配置、接口封装、数据解析、UI绑定及下拉刷新等核心环节,适合正在学习Android网络编程或需要课程设计参考的开发者。资…

2026/10/11 4:43:21 阅读更多 →
Go项目打deb包全攻略:从工具选型到生产实践

Go项目打deb包全攻略:从工具选型到生产实践

做 Go 项目就要打成 deb 的那种痛,我太懂了如果你维护过 Linux 服务器上的 Go 服务,肯定经历过这么一段:开发机上一顿go build,二进制是出来了,扔到生产服务器上也能跑,但每次升级都要手动传文件、手动停服…

2026/10/11 4:43:21 阅读更多 →
Wand-Enhancer 完整指南:4 步免费解锁 WeMod Wand Pro 与手机远程面板

Wand-Enhancer 完整指南:4 步免费解锁 WeMod Wand Pro 与手机远程面板

Wand-Enhancer 完整指南:4 步免费解锁 WeMod Wand Pro 与手机远程面板 【免费下载链接】Wand-Enhancer Advanced UX and interoperability extension for Wand (WeMod) app 项目地址: https://gitcode.com/GitHub_Trending/we/Wand-Enhancer Wand-Enhancer 是…

2026/10/11 4:42:20 阅读更多 →

日新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/11 0:00:27 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/11 0:00:27 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

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

2026/10/10 5:23:50 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

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

2026/10/9 21:32:20 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

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

2026/10/10 10:38:42 阅读更多 →