a进栈,b进栈,遇到+,a和b弹出,得到a+b, (a+b)进栈,-进栈,弹出(a+b),得到-(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) =
运算法则符合我们正常的运算规律
后缀式是由中缀式所得
如 AB+CD+*这个例子:
运算法则,从从左到右依次进栈,遇见字母入栈,遇见运算符,将前两个字母弹出,进行运算符计算后,将值在入栈,重复此过程:根据后缀表达式求中缀表达式
A入栈,B入栈,遇到+,A、B弹出,(A+B)入栈,C入栈,D入栈,遇见+,C、D弹出,(C+D)入栈,遇见*,(A+B)、(C+D)弹出,(A+B)*(C+D)入栈,最终栈里面的只有一个元素,该元素的值就为计算结果,即中缀表达式
前缀式:就是后缀式的逆序
即*+DC+BA
从右到左依次入栈,只是跟后缀式入栈方向相反,过程相同