中缀表达式转换为前缀和后缀形式
A+B*C, 如果写成全括号形式:
(A+(B*C)), 显式地表达了计算次序, 每一对括号都包含了一组完整的操作符和操作数
-
看子表达式(B*C)的右括号,如果把操作符
*
移到右括号的位置,替代它,再删去左括号,得到BC*
进一步再把更多的操作符移动到相应的右括号处替代它,再删去左括号,那么整个表达式就转换为后缀表达式了
-
同样地,如果我们把操作符移动到左括号的位置替代它,然后删掉所有的右括号,也就得到了前缀表达式.
所以,中缀表达式转换为前缀和后缀形式只需两步:
- 将中缀表达式转换为全括号形式
- 将所有的操作符移动到子表达式所在的左括号(前缀)或者右括号(后缀)处,替代之,再删除所有的括号
通用的中缀转后缀算法:
- 在从左到右逐个字符扫描中缀表达式的过程中,采用一个栈来暂存为处理的操作符
- 栈顶的操作符就是最近暂存进去的,当遇到一个新的操作符,就需要跟栈顶的操作符比较下优先级,再行处理
,再行处理