所谓逆波兰便是反其道而行之.我们一般上的表达式,运算符都是镶嵌在数与数之间的,而逆波兰则独树一帜将运算变成了小尾巴粘到了数字的后面.说起来好像很抽象,还是举个例子吧.
例:
一般表达式 | 逆波兰表达式 |
---|---|
(a + (b - c) * d) / e | abc - d * + e / |
该表达式的运算顺序:
- b - c = x
- x * d = y
- a + y = z
- z / e = result
逆波兰采用了栈的先进后出的方式罗列数字与运算符的顺序
第一步将a压入栈中,第二步将b压入,第三步压入c
在压入运算符" - “的时候,
数字便会按照压入栈中的逆序弹出,
先弹出c然后再弹出b,
再将拿到的b减去c得到X.
接着又将X压入栈中,
然后把d也压入栈中,
遇到运算符” * “,
同理弹出d和X,
再将X乘以d得到Y,
将Y压入,
遇到” + “,
弹出Y, a,
a + y = Z,
压入Z,
压入e,
遇到” / ",
弹出e , Z
Z / e = result
努力做得详细一些,希望你能看懂.
接下来是实现的代码:
public class Test{
public static void main(