資料結構中的中綴表示式轉化成字尾表示式
接上一篇部落格。
已知操作符包括:+ , / , * , / , ( , ) ;
形如中綴表示式: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(‘#’),退棧,結束 |
嗯,這樣就足夠清楚了。程式後續再補上。