中缀表达式是我们平时看到的运算式形式,但是对于计算机来说是非常难以理解的形式,在计算机运算中后缀表达式是更为常见的一种形式,将中缀表达式转换为后缀是我们必须掌握的方法。
下面是依次扫描的几种基本原则:
1.如果扫描的是数字,则直接输出;
2.如果扫描的是'(',则直接入栈,此时'('变为优先级最小的运算符;
3.如果扫描的是')',则栈顶元素不断出栈,直到将'('出栈(注意:'(',')'符号仅当标记使用,不用打印出后缀表达式中);
4.如果扫描的是其它运算符,如果栈为空或优先级小于自己,则入栈;否则不断地出栈直到满足要求;
例子:
求 (a/(b*c-d))/(e-b)+d 的后缀表达式
1.扫描到'(',进入符号栈;
2.'a' 直接输出;
3.‘/’优先级大于'(',入符号栈;
4.'('直接入栈;
5.'b' 直接输出;
6.'*'优先级大于'(',直接入栈;
7.'c' 直接输出;
8.'-'优先级小于栈顶的 '*','*'输出,栈顶变为'(','-'入栈;
9.‘d’直接输出;
10.')'入栈,输出栈中的 '-',消除一个'(',栈顶现在变成'/';
11.‘)’入栈,栈顶'/'输出,并消掉'(',符号栈为空;
12.'/'入栈;
13.'('入栈;
14.‘e’ 直接输出;
15.'-'优先级大于栈顶的'(',入栈;
16.‘b’ 直接输出;
17.')'入栈,栈顶'-'输出,消掉'(',此时栈顶变成'/';
18.‘+’优先级小于'/','/'输出;
19.‘d’直接输出;
20.扫描完毕,将栈中元素依次弹出'+';
最后得到:abc*d-/eb-/d+