后缀表达式相对于中缀表达式的优点:
1:不考虑运算优先级和括号。
2:从左到右单次扫描即可,时间复杂度O(1)。
注意:
堆栈是一种计算后缀表达式的理想数据结构,本例中笔者使用了java.util.Stack包,有必要一提的是,java中实现的Stack类由于是从java.util.Vector继承而来,所以它包含了一些从父类继承的方法,因为要凸显栈式结构的实质,所以这里笔者只使用Push,Pop等一般堆栈共有的方法。
基本算法思路:
1:从左到右扫描表达式,依次识别对表达式中每个字符,判断其为操作数还是操作符
2:如果是操作数,则将其压入栈中
3:如果是操作符,则从栈顶弹出两个元素,进行计算后将计算结果重新压入栈中
4:重复上述过程,直至栈中只剩余一个元素,此时表达式也应该到达末尾
注意:为了简化问题,上述过程并没有对表达式是否合法进行判断。
基本过程如图: