中缀、后缀表达式定义
- 中缀表达式又称波兰式,有利于人们阅读与表达。
- 后缀表达式又称逆波兰式,有利于机器进行运算。
例题1:
中缀表达式:(a+b+c*d) /e
- 首先让我们来看一下运算符对应的优先级,显然括号里的**“乘法”**的优先级最高,所以先得出cd*,让我们把cd*记为q,括号里的表达式即可转化成a+b+q。
- 然后括号里还剩下两个加法,两者的优先级相同,依次读取,a+b首先转化成ab+,接着ab+作为一个新的数,让我们把它记为p,那么括号里的表达式就剩下p+q,转化成后缀表达式,显然是pq+,让我们把它记为r。
- 然后表达式就变成了r/e,转化成后缀表达式,显然是re/,好了,此刻我们已经处理完全部表达式了。
- 此时表达式为re/,让我们依次将表达式还原,r=pq+、p=ab+、q=cd*,将这些带入,得原表达式=ab+cd*+e/,
OK!得解。
这时候,就会有小朋友提问了,哥哥,哥哥,我算的结果怎么和你不一样,我是不是算错了,你看我的结果是abcd*++e/。
好的,首先恭喜你,你学会解这道题目,你的结果也是对的。
我们需要明确一个非常重要的概念中缀转后缀的结果并不唯一。
后缀表达式只是一种工具,我们寄希望于计算机通过这种工具能正确计算出表达式。
计算机处理后缀表达式的方式是:
从左向右依次扫描表达式,
(1)遇到操作数人栈,
(2)遇到操作符.则做出栈两次,获得两个操作数,
后出栈的操作数为第一个操作对象,对它们进行计算,
计算结果作为下次运算的操作数入栈。
重复上述操作,直到后缀表达式读取结束,既可完成表达式的计算。
表达式1:abcd*++e/和表达式2:ab+cd*+e/,两者计算结果是相同的。所以他俩是等价的。
接下来的例题我就不一一书写步骤了,仅提供参考答案(再次提醒答案不唯一)
例题2:
中缀表达式 a+b*(c-d)-e/f
对应转化的后缀表达式 abcd-*+ef/-
例题3:
中缀表达式 A+B*(C-D)-E/F
对应转化的后缀表达式 ABCD-*+EF/-