上回讲了如何计算后缀表达式,其实真正的难点在于如何将一个正常的字符串表达式(中缀表达式)变成一个后缀表达式。如将6 * ( 5 + ( 2 + 3) * 8 + 3)变为6 5 2 3 + 8 * + 3 + *
逆波兰表达式,它的语法规定,表达式必须以逆波兰表达式的方式给出。逆波兰表达式又叫做后缀表达式。这个知识点在数据结构和编译原理这两门课程中都有介绍,下面是一些例子:
正常的中缀表示 | 逆波兰表达式 |
a+b | a,b,+ |
a+(b-c) | a,b,c,-,+ |
a+(b-c)*d | a,b,c,-,d,*,+ |
a+d*(b-c) | a,d,b,c,-,*,+ |
首先约定表达式中运算符的优先级,从大到小依次为:()、* 和 /、+ 和 -。暂时只考虑四则运算。
顺序读取字符串表达式,规则:
- 读到的是操作数,直接输出;
- 读到的是操作符ÿ