计算机处理括号、优先级之比较繁琐,前序和后序表达式中没有括号,而且在计算中只需单向扫描,不需要考虑运算符的优先级。
举个例子说明计算过程:
名称 | 表达式 |
---|---|
中序表达式 | 2*3/(2-1)+3*(4-1) |
前序表达式 | +/*23-21*3-41 |
后序表达式 | 23*21-/341-*+ |
中序表达式:
该表达式是我们常用的,不说了。
前序表达式:
1.计算:```4-1=1```,将得到的值赋回到原式,原式变为```+/*23-21*33```
2.计算:```3*3=9```,将得到的值赋回到原式,原式变为```+/*23-219```
3.计算:取数,连续取出9,1,2,直到取出一个运算符“-”,**将与运算符最近的两个操作数进行计算**,```2-1=1```,赋回到原式中,原式变为```+/*2319```。
4.计算:取数,连续取出 9,1,3,2,**将与运算符最近的两个操作数进行计算**,```2*3=6```,将得到的值赋回到原式,原式变为:```+/619```
5.计算:取数,连续取出9,1,6,**将与运算符最近的两个操作数进行计算**,```6/1=6```,将得到的值赋回到原式,原式变为:```+69```。
6.计算:```6+9=15```,该前序表达式(```+/*23-21*3-41```)的值为15。
即从右至左取数,直到取出一个运算符,将刚取出的紧挨着运算符的两个操作数按运算符进行计算,结果回填至运算符。重复该步骤,直到最后只剩下一个字符串则剩下的字符串即为结果。
后序表达式
后序表达式的字符串扫描方式正好和前序相反,是从左往右扫描,规则类似。
整理博主的博客:http://www.cnblogs.com/hsrzyn/archive/2009/12/21/1629274.html。