【数据结构】栈的前缀、中缀、后缀表达式(逆波兰表达式)

前缀表达式

从右至左扫描表达式,遇到数字时,将数字压入堆栈,遇到运算符时,弹出栈顶的两个数,用运算符对它们做相应的计算(栈顶元素和次顶元素),并将结果入栈;重复上述过程直到表达式最左端,最后运算得出的值为表达式的结果

例如

(3+4)*5-6 对应的前缀表达式就是 - * + 3 4 5 6,针对前缀表达式求值步骤如下:

1.从右至左扫描,将 6、5、4、3 压入堆栈

2.遇到 + 运算符,因此弹出 3 和 4 (3 为栈顶元素,4 为栈底元素),计算出 3 + 4 = 7,再将 7 入栈

3.接下来是 * 运算符,因此弹出 7 和 5,计算出 7 * 5 = 35,将 35 入栈

4.最后是 - 运算符,计算出 35 - 6 = 29,由此得出最终结果

中缀表达式

1.中缀表达式就是最常见的运算表达式,如 (3 + 4) * 5 - 6

2.中缀表达式的求值是我们人最熟悉的,但是对于计算机来说却不好操作,因此,在计算结果时,往往会将中缀表达式转成其他表达式来操作(一般转成后缀表达式)

后缀表达式(逆波兰表达式)

从左至右扫描表达式,遇到数字时,将数字压入堆栈,遇到运算符时,弹出栈顶的两个数,用运算符对他们做相应的计算(栈顶元素和次顶元素),并将结果入栈;重复上述过程直到表达式最右端,最后运算得出的值即为表达式的结果

例如

(3 + 4) * 5 - 6 的后缀表达式就是 3 4 + 5 * 6 -,后缀表达式求值步骤如下:

1.从左至右扫描,将 3 和 4 压入堆栈

2.遇到 + 运算符,因此弹出 4 和 3 (4 为栈顶元素,3 为次顶元素),计算出 3 + 4 = 7,再将 7 入栈

3.将 5 入栈

4.接下来是 * 运算符,因此弹出 5 和 7,计算出 5 * 7 = 35,将 35 入栈

5.将 6 入栈

6.最后是 - 运算符,计算出 35 - 6 = 29,由此得出最终结果

相关推荐
丑梨数据10 分钟前
信创环境里跑文档工具:格式兼容与本地合规的几个坑
数据结构·人工智能·算法·决策树·排序算法
烂蜻蜓14 分钟前
Pandas入门教程(四):Series数据结构——创建、索引与常用方法
数据结构·pandas
CS创新实验室8 小时前
一棵树怎么做到“自平衡还不太费力“?——红黑树的旋转与染色
数据结构·算法·红黑树·408·计算机考研
Logic1018 小时前
C语言/数据结构位运算题解:异或XOR找出被挑选一次的果子编号——只出现一次的数字
c语言·数据结构·算法·数组·位运算·时间复杂度·空间复杂度
从小白到软工9 小时前
4-3 项目-学生成绩管理系统(上)
c语言·开发语言·数据结构·经验分享·ai编程
悠仁さん10 小时前
非类型模板参数的特化与偏特化
java·数据结构·算法
haluhalu.10 小时前
深入理解 AI Agent(1.2):Harness 工程——模型之外的竞争力
前端·数据结构·人工智能·python·langchain·个人开发
垆边人似月.10 小时前
幻兽防御战(贪心算法)
数据结构·算法
Cccp.12312 小时前
【leetcode】(十三)大数据处理
数据结构·算法·leetcode
Pniubi12 小时前
力扣70爬楼梯
数据结构·算法·leetcode