通常,按人的逻辑来说,计算四则运算的规律为:“先加减,后乘除,从左到右,先括号内后括号外。”例如:9+(3-1)*3+10/2,我们按上述的规律很快就可以算出结果:20。
但是老一点的计算机“看到”这个式子就会懵逼好久,在它们的逻辑里,它们是以这样的规律算这个式子的:9 3 1 - 3 * + 10 2 / +,第一次看到这个式子,你是不是也懵了,这就是我们今天要讲的基于栈的一种应用:逆波兰表达式计算。
逆波兰表达式又叫做后缀表达式。在通常的表达式中,二元运算符总是置于与之相关的两个运算对象之间,这种表示法也称为中缀表示。波兰逻辑学家J.Lukasiewicz于1929年提出了另一种表示表达式的方法,按此方法,每一运算符都置于其运算对象之后,故称为后缀表示。
(简单的说就是:把运算量写在前面,把算符写在后面。)
中缀表达式:9+(3-1)*3+10/2
后缀表达式:9 3 1 - 3 * +10 2 / +
规则:从左到右遍历表达式的每个数字和符号,遇到是数字就进栈,遇到是符号,就将处于栈顶两个数字出栈,进行计算,运算结果进栈,一直到最终获得结果。