表达式一般由操作数(Operand)、运算符(Operator)组成,例如算术表达式中,通常把运算符放在两个操作
数的中间,这称为中缀表达式(Infix Expression),如A+B。
波兰数学家Jan Lukasiewicz提出了另一种数学表示法,它有两种表示形式:
把运算符写在操作数之前,称为波兰表达式(Polish Expression)或前缀表达式(Prefix Expression),如+AB;
把运算符写在操作数之后,称为
逆波兰表达式(Reverse Polish Expression)或后缀表达式(Suffix Expression),
如AB+;其中,逆波兰表达式在
编译技术中有着普遍的应用。
逆波兰表达式虽然看起来比较繁琐,其实在计算机中很有用。
计算机可不知道先乘除后加减,先括号内后括
号外,它要把你输入的式子变成逆波兰表达式,它就可以不断地执行上面两个
固定的规则,直至把结果算出来
告诉你。
编译器
在处理时候按照从左至右的顺序读取逆波兰表达式,遇到运算对象直接压入堆栈,遇到运算符
就从堆栈提取后进的两个
对象进行计算,这个过程正好符合了计算机计算的原理。所以,逆波兰式非常适宜计
算机的处理。
中序表式生成的逆波兰式唯一吗?:
是唯一的,和固定形式的中序表达式一一对应,但,请注意这个概念,
例如: a+(b-c)*d 和 (b-c)*d+a 和 a+d*(b-c) 的值是完全一样的。但是,他们的中序形式不同,
产生的逆波兰式必然是不同的。
a+(b-c)*d : abc-d*+
(b-c)*d+a : bc-d*a+
a+d*(b-c) : adbc-*+