栈(Stack)汇总

栈简介

栈(Stack)是只允许在一端进行插入或者删除操作的线性表。它的操作特性可以概括为------后进先出(Last In First Out,LIFO)。栈顶(Top)------线性表允许进行插入删除的一端;

栈底(Bottom)------线性表不允许进行插入删除的一端;

解析表达式

以±乘()为例。

数据栈记录数值,操作符栈记录操作符。

遇到右括号或运算结束时才计算加减,此时确保没有乘法。ret = 0; 如果栈顶操作符是+,则ret += 数据栈顶, 否则ret -=数据栈顶。两个栈出栈。直到遇到(或操作栈为空。如果遇到(,则把左括号出栈。栈顶元素 += ret。

乘法执行时机:新的运算数或括号执行完成。 只需要执行一次乘法。

操作数(变量、常量) 之前的符合如果是乘号,马上计算。否则,等右括号或结束时,统一计算。

操作符栈只会有+ - (*。

难度分
【栈】1106. 解析布尔表达式 1880
【栈】1096. 花括号展开 II 2348
【栈】224. 基本计算器
【回溯 栈 代数系统 动态规划】282. 给表达式添加运算符
【栈】591. 标签验证器
【栈】726. 原子的数量
【栈】770. 基本计算器 IV

了解逆波兰表达式

前缀(前序)表达法(波兰表达式):+ a b

中缀(中序)表达法:a + b 我们常用的表达方式。

后缀(后续)表达法(逆波兰表达式):a b +

逆波兰表达式优点,运算简单,不需要括号:

操作数入栈,遇到操作符,则取出栈顶两个元素,进行运算,并将结果入栈。

局部变量的作用域

【栈】736. Lisp 语法解析

对顶栈

难度分
【对顶栈】2296. 设计一个文本编辑器 1911

临项消除

难度分
【栈 最小公倍数 最大公约数】2197. 替换数组中的非互质数 2057
【栈】2751. 机器人碰撞 2091

括号合法性判断

较难题为主,以后补充。

单调栈

单调栈分类、封装和总结

其它

难度分
【栈】895. 最大频率栈 2027
【栈】1172. 餐盘栈 2109

扩展阅读

视频课程

有效学习:明确的目标 及时的反馈 拉伸区(难度合适),可以先学简单的课程,请移步CSDN学院,听白银讲师(也就是鄙人)的讲解。
https://edu.csdn.net/course/detail/38771

如何你想快速形成战斗了,为老板分忧,请学习C#入职培训、C++入职培训等课程
https://edu.csdn.net/lecturer/6176

相关下载

想高屋建瓴的学习算法,请下载《喜缺全书算法册》doc版
https://download.csdn.net/download/he_zhidan/88348653

我想对大家说的话
《喜缺全书算法册》以原理、正确性证明、总结为主。
闻缺陷则喜是一个美好的愿望,早发现问题,早修改问题,给老板节约钱。
子墨子言之:事无终始,无务多业。也就是我们常说的专业的人做专业的事。
如果程序是一条龙,那算法就是他的是睛

测试环境

操作系统:win7 开发环境: VS2019 C++17

或者 操作系统:win10 开发环境: VS2022 C++17

如无特殊说明,本算法用**C++**实现。

相关推荐
东风吹柳11 分钟前
观察者模式(sigslot in C++)
c++·观察者模式·信号槽·sigslot
A懿轩A19 分钟前
C/C++ 数据结构与算法【栈和队列】 栈+队列详细解析【日常学习,考研必备】带图+详细代码
c语言·数据结构·c++·学习·考研·算法·栈和队列
大胆飞猪1 小时前
C++9--前置++和后置++重载,const,日期类的实现(对前几篇知识点的应用)
c++
1 9 J2 小时前
数据结构 C/C++(实验五:图)
c语言·数据结构·c++·学习·算法
夕泠爱吃糖2 小时前
C++中如何实现序列化和反序列化?
服务器·数据库·c++
长潇若雪2 小时前
《类和对象:基础原理全解析(上篇)》
开发语言·c++·经验分享·类和对象
汝即来归2 小时前
选择排序和冒泡排序;MySQL架构
数据结构·算法·排序算法
染指11104 小时前
50.第二阶段x86游戏实战2-lua获取本地寻路,跨地图寻路和获取当前地图id
c++·windows·lua·游戏安全·反游戏外挂·游戏逆向·luastudio
Code out the future4 小时前
【C++——临时对象,const T&】
开发语言·c++
sam-zy4 小时前
MFC用List Control 和Picture控件实现界面切换效果
c++·mfc