后缀表达式和前缀表达式是什么呢?
前缀表达式:不包括括号的算术表达式,将运算符写在前面,操作数写在后面的表达式。为纪念其发明者波兰数学家Jan Lukasiewcz,也称“波兰式”。
后缀表达式:不包括括号,运算符放在两个运算对象的后面,所有的计算按运算符出现的顺序,严格从左向右进行。也称“逆波兰式”
举个栗子:
3+4 这是中序表达式(就是我们平时的写法)
34+ 这就是后缀表达式
+34 即前缀表达式
那么如何把中序表达式写成后缀或者前缀的形式呢?
手动转:
例:3+(2-5)*6/3
转后缀:先将它根据运算顺序加上括号,即 (3+(((2-5)*6)/3))
然后从最开始的括号开始,保留数字,把当前运算所用的运算符放到该括号后面
第一步:(3+(((25)-*6)/3)) 这里算的是2-5,所以保留2和5,把-放到(2-5)这个括号后
第二步:(3+(((25)-6)*/3)) 这里算的是(2-5)*6,为乘运算,所以把*放到该运算括号后
第三步:(3+(((25)-6)*3)/) 以此类推
第四步:(3(((25)-6)*3)/)+
第五步:325-6*3/+ 最后删掉所有括号就好啦
如果你不确定是否正确,用后缀表达式计算一下值,两式值一样就对啦
转前缀:同样先加括号,即(3+(((2-5)*6)/3))
然后从最开始的括号开始,保留数字,把当前运算所用的运算符放到前面!(和后缀相反)
第一步:(3+((-(25)*6)/3)) 把-放到括号前面
第二步:(3+(*(-(25)6)/3)) 以此类推
第三步:(3+/(*(-(25)6)3))
第四步:+(3/(*(-(25)6)3))
第五步:+3/*-2563
同样,不确定的话,验证一下
那么后缀表达式是如何进行计算的呢?
例:325-6*3/+
这里规则是:从左到右遍历表达式的每个数字和符号,遇到数字就进栈,遇到符号,就将处于栈顶的两个数字出栈进行运算,将运算结果入栈,一直到得到最后结果。
1.首先,我们初始化一个空栈,此栈用来进出数字。
2.后缀表达式前三个都是数字,所以进栈
3. - 不是数字,所以 2 和 5 出栈,进行运算,(这里注意后出栈的在运算符前面,即 2 后出,所以是 2 - 5 ),将运算结果入栈(-3)
4.数字 6 入栈
5. * 不是数字,所以 -3 和 6 出栈,-3 * 6 = -18,-18 入栈
6. 数字 3 入栈
7. / 不是数字,所以 3 和 -18 出栈,-18 / 3 = -6 , -6 入栈
8. + 不是数字,所以 3 和 -6 出栈, 3 + ( -6 ) = -3
9.运算结束
图示:
对于前缀表达式的运算后续更新......