暂记之逆波兰表达式子

来源:互联网 发布:大数据领域ml是什么 编辑:程序博客网 时间:2024/06/10 01:20
   扩展阅读:http://www.cnblogs.com/wanghetao/archive/2012/04/23/2466580.html
   表达式一般由操作数(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-*+