一. 波兰式(前缀表达式)
波兰逻辑学家J.Lukasiewicz于1929年提出的表示表达式的一种方式,即二元运算符至于运算数之前的一种表达方式。
二.中缀表达式
普通的表示表达式的一种方法,将二元运算符置于运算数中间,也是大多数情况下使用的一种方法。
三.逆波兰式(后缀表达式)
与波兰式相反,是二元运算符置于运算数之后的一种表达方式。每一运算符都置于其运算对象之后,故称为后缀表示。
波兰式与逆波兰式表示时的一个特点是,表达式中各个运算是按运算符出现的顺序进行的,故无须使用括号来指示运算顺序。
中缀表达式 后缀表达式 前缀表达式
A+B AB+ +AB
A+B*C ABC*+ *+AB
(A+B)*(C+D) AB+CD+* *+AB+CD
从上面的例子可以看出:
(1) 在三种表示中,运算对象出现的顺序相同;
(2) 在后缀表示中,运算符按实际计算顺序从左到右排列,且每一运算符总是跟在其运算对象之后。
(3) 在前缀表示中,运算符按实际计算顺序从左到右排列,且每一运算符总是跟在其运算对象之前。
四.波兰式的应用——算术表达式求值
在数据结构中,使用栈的概念完成表达式的求值操作,在计算机系统处理表达式时,将中缀表达式以后缀表达式的形式表达。
具体实现方法大致为:
- 设两个栈:操作数栈和运算符栈
- 操作数依次入操作数栈
- 运算符入栈前与运算符的栈顶运算符比较优先级
- 优先级高于栈顶运算符,压入栈,读入下一个符号
- 优先级低于栈顶运算符,栈顶运算符出栈,操作数栈退出两个操作数,进行运算,结果压入操作数栈
- 优先级相等,左右括号相遇,栈顶运算符出栈即可
- 后缀表达式读完,栈顶为运算结果