我们来看一个栈比较常见的应用:数学表达式的求值。
对于任意一个四则运算表达式,比如“9+(5-1)*3+8/2”。我们采用“从左到右,先乘除,后加减,先括号内,后括号外”的原则,口算就可以得出结果,但是计算机是如果算出它的值呢?
后缀(逆波兰)表达式
逆波兰表示法(RPN),是一种由波兰数学家Jan Łukasiewicz 1920年引入的数学表达式,在RPN中,所有操作符置于操作数的后面,因此也被称为后缀表达式(Postfix Notation)。后缀表达式不需要括号来标识操作符的优先级。
而我们生活中使用的表达式方法是中缀表达式(Infix Notation),即操作符穿插在数字中间。
下面的表格展示了中缀表达式和后缀表达式的对比:
而对于之前的例子“9+(5-1)*3+8/2”,它的后缀表达式为“951-3*+82/+”。
下面我们来看如何将中缀表达式转换为后缀表达式:
1.创建一个操作栈来存放操作符。
2.将输入的字符串转换为List.
3.遍历List