接上一篇博客。
已知操作符包括:+ , / , * , / , ( , ) ;
形如中缀表达式:a+b-a*((c+d)/e-f)+g
步骤 | 扫描项 | 项类型 | 动作 | 栈内内容 | 输出 |
0 |
|
| ‘#’入栈,读入下一个符号 | # |
|
1 | a | 操作数 | 直接输出 | # | a |
2 | + | 操作符 | isp(‘#’) < icp(‘+’),进栈 | #+ |
|
3 | b | 操作数 | 直接输出 | #+ | b |
4 | - | 操作符 | isp(‘+’) > icp(‘-’),退栈并退出 | # | + |
5 |
|
| isp(‘#’) < icp(‘-’),进栈 | #- |
|
6 | a | 操作数 | 直接输出 | #- | a |
7 | * | 操作符 | isp(‘-’) < icp(‘*’),进栈 | #-* |
|
8 | ( | 操作符 | isp(‘*’) < icp(‘(’),进栈 | #-*( |
|
9 | ( | 操作符 | isp(‘(’) < icp(‘(’),进栈 | #-*(( |
|
10 | c | 操作数 | 直接输出 | #-*(( | c |
11 | + | 操作符 | isp(‘(’) < icp(‘+’),进栈 | #-*((+ |
|
12 | d | 操作数 | 直接输出 | #-*((+ | d |
13 | ) | 操作符 | isp(‘+’) > icp(‘)’),退栈并输出 | #-*(( | + |
14 |
|
| isp(‘(’) = icp(‘(’),直接退栈 | #-*( |
|
15 | / | 操作符 | isp(‘(’) < icp(‘/’),进栈 | #-*(/ |
|
16 | e | 操作数 | 直接输出 | #-*(/ | e |
17 | - | 操作符 | isp(‘/’) > icp(‘-’),退栈并输出 | #-*( | / |
18 |
|
| isp(‘(’) < icp(‘-’),进栈 | #-*(- |
|
19 | f | 操作数 | 直接输出 | #-*(- | f |
20 | ) | 操作符 | isp(‘-’) > icp(‘)’),退栈并输出 | #-*( | - |
21 |
|
| isp(‘(’) = icp(‘(’),直接退栈 | #-* |
|
22 | + | 操作符 | isp(‘*’) > icp(‘+’),退栈并输出 | #- | * |
23 |
|
| isp(‘-’) > icp(‘+’),退栈并输出 | # | - |
24 |
|
| isp(‘#’) < icp(‘+’),进栈 | #+ |
|
25 | g | 操作数 | 直接输出 | #+ | g |
26 | # | 操作符 | isp(‘+’) > icp(‘#’),退栈并输出 | # | + |
27 |
|
| isp(‘#’) > icp(‘#’),退栈,结束 |
|
|
嗯,这样就足够清楚了。程序后续再补上。