栈(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++**实现。

相关推荐
Chenyu_3104 小时前
12.找到字符串中所有字母异位词
c语言·数据结构·算法·哈希算法
achene_ql6 小时前
select、poll、epoll 与 Reactor 模式
linux·服务器·网络·c++
SY师弟7 小时前
51单片机——计分器
c语言·c++·单片机·嵌入式硬件·51单片机·嵌入式
豪斯有话说8 小时前
C++_哈希表
数据结构·c++·散列表
real_metrix9 小时前
【学习笔记】erase 删除顺序迭代器后迭代器失效的解决方案
c++·迭代器·迭代器失效·erase
朝朝又沐沐9 小时前
基于算法竞赛的c++编程(18)string类细节问题
开发语言·c++·算法
记得早睡~9 小时前
leetcode73-矩阵置零
数据结构·leetcode·矩阵
a.30210 小时前
C++ 时间处理指南:深入剖析<ctime>库
数据结构·c++·算法
Dave_Young11 小时前
上位机开发过程中的设计模式体会(1):工厂方法模式、单例模式和生成器模式
c++·设计模式
old_power11 小时前
在 Windows 系统下配置 VSCode + CMake + Ninja 进行 C++ 或 Qt 开发
c++·windows·vscode·cmake·ninja