“表达式”的版本间的差异
跳到导航
跳到搜索
Jihongchang(讨论 | 贡献) |
Jihongchang(讨论 | 贡献) |
||
第110行: | 第110行: | ||
|} | |} | ||
stack(5) | stack(5) | ||
+ | {| class="wikitable" | ||
+ | | | ||
+ | |- | ||
+ | |5 | ||
+ | |- | ||
+ | |c | ||
+ | |- | ||
+ | |x | ||
+ | |} | ||
+ | stack(6) | ||
+ | |||
+ | 遇到5压入栈内 | ||
+ | {| class="wikitable" | ||
+ | |+ | ||
+ | | | ||
+ | |- | ||
+ | | | ||
+ | |- | ||
+ | | | ||
+ | |- | ||
+ | |x | ||
+ | |} | ||
+ | stack(7) | ||
+ | |||
+ | 遇到+,先取出5,再取出c,把先取出来的放到后面,把后取出来的放到前面,计算c+5得到结果y,压入栈内 | ||
+ | {| class="wikitable" | ||
+ | |+ | ||
+ | | | ||
+ | |- | ||
+ | | | ||
+ | |- | ||
+ | |y | ||
+ | |- | ||
+ | |x | ||
+ | |} | ||
+ | stack(8) | ||
+ | {| class="wikitable" | ||
+ | |+ | ||
+ | | | ||
+ | |- | ||
+ | | | ||
+ | |- | ||
+ | | | ||
+ | |- | ||
+ | | | ||
+ | |} | ||
+ | stack(9) | ||
+ | |||
+ | 遇到*,先取出y,再取出x,把先取出来的放到后面,把后取出来的放到前面,计算x*y得到最终结果 |
2022年9月14日 (三) 10:08的版本
https://www.bilibili.com/video/BV1hg411V7Bm?p=46
表达式的类型及转换规则
前缀表达式(+ab) 把符号提到运算对象的前面
中缀表达式(a+b) 常见的,将符号放在运算对象的中间
后缀表达式(ab+) 把运算符号提到运算对象的后面,后缀表达式也叫逆波兰式
区别就是运算符号放在运算对象哪一边
可以分别转换成二叉树
的三种不同遍历方式:前序遍历、中序遍历和后序遍历
如果用前序遍历得到的就是前缀表达式,如果用中序遍历得到的就是中序表达式,如果用后序遍历得到的就是后序表达式
1)将中缀表达式(a-b)*(c+5)转为后缀表达式
ab-
ab- c5+
ab- c5+ *
所以答案是:ab- c5+ *
将中缀表达式a-b*c+5转为后缀表达式
bc*
abc*-
abc*-5+
所以答案是:abc*-5+
2)后缀表达式的运算过程
其实就是把后缀表达式转换为中缀表达式的具体计算过程
规则:运算对象放栈内,运算符号取2个元素进行计算
ab-c5+*
a |
stack(1)
遇到a放到栈内
b |
a |
stack(2)
遇到b放到栈内
stack(3)
遇到-,先取出b,再取出a,把先取出来的放到后面,把后取出来的放到前面,计算a-b得到结果x,压入栈内
x |
stack(4)
遇到c压入栈内
c |
x |
stack(5)
5 |
c |
x |
stack(6)
遇到5压入栈内
x |
stack(7)
遇到+,先取出5,再取出c,把先取出来的放到后面,把后取出来的放到前面,计算c+5得到结果y,压入栈内
y |
x |
stack(8)
stack(9)
遇到*,先取出y,再取出x,把先取出来的放到后面,把后取出来的放到前面,计算x*y得到最终结果