后缀表达式遵守几个规则:
1、遇到字符直接输出
2、优先级高的入栈,优先级低的不用出栈。
3、优先级低或相等的的入栈,优先级高的先出栈。
4、括号左端入栈,右端入栈时出栈括号内的所有符号。
拿两道题最好说明:
1、表达式Ax(B+C)-D的后缀表达式
扫描到的元素 | 符号栈 | 输出 |
---|---|---|
A | 空 | A |
* | *入栈 | A |
( | 括号优先级高,入栈在栈顶,栈内(* | A |
B | (* | AB |
+ | 没遇到右括号,保留,栈内:+(* | AB |
C | +(* | ABC |
) | 括号内全部出栈输出,栈内:* | ABC+ |
— | —的优先级低于*,入栈前先出栈输出,栈内只有— | ABC+* |
D | — | ABC+*D |
无 | 字符全部输出了,栈清空 | ABC+*D- |
按照规则不加提示:
2、A+B-Ax((C+D)\E-F)+G的后缀表达式
扫描到的元素 | 符号栈 | 输出 |
---|---|---|
A | 空 | A |
+ | + | A |
B | + | AB |
- | - | AB+ |
A | - | AB+A |
* | *- | AB+A |
( | (*- | AB+A |
( | ((*- | AB+A |
C | ((*- | AB+AC |
+ | +((*-,注意这里+和-之间隔了很多符号,-在栈底无法出栈 | AB+AC |
D | +((*- | AB+ACD |
) | (*- | AB+ACD+ |
\ | \(*- | AB+ACD+ |
E | \(*- | AB+ACD+E |
- | -(*- | AB+ACD+E\ |
F | -(*- | AB+ACD+E\F |
) | *- | AB+ACD+E\F- |
+ | + | AB+ACD+E\F-*- |
G | + | AB+ACD+E\F-*-G |
空 | 空 | AB+ACD+E\F-*-G+ |
这个题要掌握了,这个知识点基本没毛病了,剩下的细心就好。