news 2026/9/28 9:29:13

数据结构————栈

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
数据结构————栈

一.栈

1. 栈的的概念

栈是一种特殊的线性表,其只允许在固定的一端进行插入和删除元素的操作。进行元素插入和删除的一段是栈顶,另一端是栈底。栈中的元素遵从后进先出LIFO(Last In First Out)的原则。

  • 压栈:栈的插入操作叫做进栈/入栈,入数据在栈顶。
  • 出栈:栈的删除操作叫做出栈/出数据在栈顶。

2.栈的结构

3.栈的状态

3.1. 空栈

3.1.1.概念:

指栈中没有任何元素,栈顶指针(或列表长度)指向 “空” 的位置

3.2.满栈

3.2.1.概念:

满栈仅针对顺序栈(数组 / 列表实现的栈),指栈中元素数量达到了预设的最大容量,无法再执行入栈操作

3.3.递归栈

3.3.1.概念:

递归栈不是一种物理栈,而是程序执行递归函数时,操作系统 / 解释器为其维护的函数调用栈。每一次递归调用都会将函数的上下文(参数、局部变量、返回地址)压入栈;每一次递归返回(执行完当前函数),都会将该上下文弹出栈。

3.4.递减栈

3.4.1.概念:

递减栈(也叫 “单调递减栈”)是一种算法技巧(而非基础数据结构),指栈内的元素始终保持严格递减(或非递增)的顺序。入栈时会主动弹出不符合递减规则的元素,确保栈的单调性。

二.栈的实现

顺序栈(用数组实现)

函数接口

#defineMAX_SIZE100// 定义栈的最大容量typedefintSTDataType;// 栈中元素的类型// 顺序栈结构体typedefstructStack{STDataType a[MAX_SIZE];// 数组用于存储栈元素inttop;// 栈顶指针}Stack;// 初始化栈voidSTInit(Stack*ps);// 判断栈是否为空intSTEmpty(Stack*ps);// 判断栈是否为满intSTFull(Stack*ps);// 入栈操作voidSTPush(Stack*ps,STDataType x);// 出栈操作voidSTPop(Stack*ps);// 查看栈顶元素STDataTypeSTTop(Stack*ps);// 获取栈的大小intSTSize(Stack*ps);
初始化
// 初始化栈voidSTInit(Stack*ps){assert(ps);ps->top=-1;// 初始化栈顶指针为-1,表示栈为空}
判断是否为空
// 判断栈是否为空intSTEmpty(Stack*ps){assert(ps);returnps->top==-1;// 如果栈顶指针为-1,表示栈为空}
判断是否满了
// 判断栈是否为满intSTFull(Stack*ps){assert(ps);returnps->top==MAX_SIZE-1;// 如果栈顶指针等于最大容量减1,表示栈已满}
入栈
// 入栈操作voidSTPush(Stack*ps,STDataType x){assert(ps);if(STFull(ps)){printf("栈已满,无法入栈!\n");return;}ps->a[++(ps->top)]=x;// 将元素放入栈顶,并更新栈顶指针}
出栈
// 出栈操作voidSTPop(Stack*ps){assert(ps);if(STEmpty(ps)){printf("栈为空,无法出栈!\n");return;}ps->top--;// 更新栈顶指针,删除栈顶元素}
查看栈顶元素
// 查看栈顶元素STDataTypeSTTop(Stack*ps){assert(ps);if(STEmpty(ps)){printf("栈为空,无法查看栈顶元素!\n");return-1;// 如果栈为空,返回一个非法值}returnps->a[ps->top];// 返回栈顶元素}
有效元素个数
// 获取栈的大小intSTSize(Stack*ps){assert(ps);returnps->top+1;// 栈的大小等于栈顶指针+1}

链式栈(用链表实现)

函数接口

typedefintSTDataType;//动态typedefstructStack{int*a;inttop;intcapacity;}ST;voidSTInit(ST*ps);voidSTDestory(ST*ps);voidSTPush(ST*ps,STDataType x);voidSTPop(ST*ps);intSTSize(ST*ps);boolSTEmpty(ST*ps);STDataTypeSTTop(ST*ps);
初始化
#include"STack.h"voidSTInit(ST*ps){assert(ps);ps->a=(STDataType*)malloc(sizeof(STDataType)*4);if(ps->a==NULL){perror("malloc failed");return;}ps->capacity=4;ps->top=0;//top栈顶元素的下一个位置//ps->top = -1;//top是栈顶元素位置}
销毁
voidSTDestory(ST*ps){assert(ps);free(ps);ps->a=NULL;ps->capacity=0;ps->top=0;}
进栈
voidSTPush(ST*ps,STDataType x){assert(ps);if(ps->top==ps->capacity){STDataType*tmp=(STDataType*)realloc(ps->a,sizeof(STDataType)*ps->capacity*2);if(tmp==NULL){perror("realloc failed");return;}ps->a=tmp;ps->capacity*=2;}ps->a[ps->top]=x;ps->top++;}
出栈
voidSTPop(ST*ps){assert(ps);assert(!STEmpty(ps));ps->top--;}
有效元素个数
intSTSize(ST*ps){assert(ps);returnps->top;}
判断是否为空
boolSTEmpty(ST*ps){assert(ps);returnps->top==0;}
获取栈顶元素
STDataTypeSTTop(ST*ps){assert(ps);assert(!STEmpty(ps));returnps->a[ps->top-1];}

三.栈的应用

1.递归

2.括号的匹配

这是leetcode上的一道例题,有兴趣大家可以去试一试
有效括号

希望大家能支持关注一下新人博主,谢谢。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/27 21:51:59

基于SpringBoot的考编论坛网站毕业设计源码

博主介绍:✌ 专注于Java,python,✌关注✌私信我✌具体的问题,我会尽力帮助你。一、研究目的本研究旨在构建一个基于SpringBoot框架的考编论坛网站,以实现以下研究目的: 首先,通过设计并实现一个功能完善的考编论坛网站…

作者头像 李华
网站建设 2026/9/27 14:36:58

干货满满!大数据流处理的数据清洗技巧

干货满满!大数据流处理的数据清洗技巧:从“流水质检”到“智能提纯” 一、引入与连接:当“流水”变“乱流”,你需要实时“治水” 清晨7点,某电商平台的实时推荐系统突然“抽风”——给用户推送了10条“婴儿奶粉”广告&…

作者头像 李华
网站建设 2026/9/27 18:27:55

基于SpringBoot的仓库管理系统毕设源码

博主介绍:✌ 专注于Java,python,✌关注✌私信我✌具体的问题,我会尽力帮助你。一、研究目的本研究旨在设计并实现一个基于SpringBoot框架的仓库管理系统,以满足现代企业对高效、可靠、易用的仓库管理解决方案的需求。具体研究目的如下&#x…

作者头像 李华
网站建设 2026/9/27 9:42:53

HY-MT1.5如何接入现有系统?API接口调用实战教程

HY-MT1.5如何接入现有系统?API接口调用实战教程 1. 引言:为什么选择HY-MT1.5进行翻译集成? 随着全球化业务的不断扩展,多语言实时翻译能力已成为企业出海、内容本地化和跨语言沟通的核心需求。传统商业翻译API(如Goog…

作者头像 李华
网站建设 2026/9/27 20:13:00

Fine-tuning十年演进(2015–2025)

Fine-tuning十年演进(2015–2025) 一句话总论: 2015年Fine-tuning还是“全参数手工微调小样本监督学习”的粗暴时代,2025年已进化成“端到端VLA意图级自适应微调量子鲁棒零样本亿级在线自进化全域具身知识统一”的普惠智能时代&am…

作者头像 李华
网站建设 2026/9/22 10:35:14

Agent十年演进(2015–2025)

Agent十年演进(2015–2025) 一句话总论: 2015年Agent还是“规则脚本单一任务执行器”的工具时代,2025年已进化成“万亿级多模态VLA具身智能Agent实时意图级自进化量子鲁棒社交协作全域自主决策伙伴”的通用智能物种,中…

作者头像 李华