问题来由:
读入一个字符串形式的四则运算表达式,输出对应的计算结果。如读入的是“6 * ( 5 + ( 2 + 3) * 8 + 3)”,那么解析后的输出结果应为288。
思路:
我们可以将这种操作顺序书写如下:
6 5 2 3 + 8 * + 3 + *
这个记法就是逆波兰(reverse Polish)表达式,其求值过程恰好就是上面所描述的过程。逆波兰表达式又叫做后缀(postfix)表达式。在通常的表达式中,运算符总是置于与之相关的两个运算对象之间,所以,这种表示法也称为中缀表示。波兰逻辑学家 J.Lukasiewicz于1929年提出了另一种表示表达式的方法。按此方法,每一运算符都置于其运算对象之后,故称为后缀表示。
计算后缀表达式最简单的方法就是使用一个栈:
下面演示下“6 5 2 3 + 8 * + 3 + *”的处理过程
计算一个后缀表达式话费的时间是O(N),该算法的计算非常简单,同时不需要知道任何的计算优先级。
那么现在的问题就是如何将一个正常的表达式转换为后缀表达式???
且看下回分解。
原文地址:http://blog.csdn.net/bruce_6/article/details/39182151