一. 后缀表达式表达式的计算
后缀表达式也叫做 逆波兰表达式 ,一般是借助栈求值,
例:["4","13","5","/","+"]
遇到数字直接放入栈中 4 13 5
遇到操作符 取栈中的前两个元素,先取右值(right) 5,后取左值(left) 13
再将(left 操作符 right)2 结果放入到栈中 4 2
重复上述过程即可得到答案 6
二. 中缀表达式转化为后缀表达式
中缀表达式我们没法直接计算,通常转化为后缀表达式进行计算
例:a+(b/c)*d
1.遇到操作数直接输出
2. 遇到操作符
a. 栈为空,直接入栈
b. 栈不为空,跟栈顶操作符进行比较
比栈顶优先级高,进栈
比栈顶优先符低或者相同,输出
括号的优先级问题
遇到前括号( 直接入栈 但我们认为它的优先级很低
遇到后括号 ) 优先级很低 ,输出,同时把左括号也输出
遇到a
输出 : a
栈:
遇到 + 栈为空直接入栈
输出 : a
栈 :+
遇到( 直接入栈
输出 :a
栈 :+ (
遇到 d 操作数输出
输出 :a b
栈 :+ (
遇到 / 比栈顶( 优先级高 入栈
输出 :a b
栈 :+ ( /
遇到 c 操作数输出
输出 :a b c
栈 :+ ( /
遇到 ) 比栈顶优先级低 出栈 () 将其中的操作符输出
输出 :a b c /
栈 :+
遇到 * 比栈顶+ 优先级高入栈
输出 :a b c /
栈 :+ *
遇到 d 操作数输出
输出 :a b c / d
栈 :+ *
最后再将栈顶元素输出
输出 :a b c / d * +
即中缀转后缀形成的表达式为 : a b c / d * +