已知操作符包括:+ , / , * , / , ( , ) ;
形如中綴表示式:a+b-a*((c+d)/e-f)+g
步驟掃瞄項
項型別動作
棧內內容輸出0
『#』入棧,讀入下乙個符號#1
a運算元
直接輸出#a
2+操作符isp(『#』) < icp(『+』),進棧#+3
b運算元
直接輸出#+b
4-操作符isp(『+』) > icp(『-』),退棧並退出#+
5isp(『#』) < icp(『-』),進棧#-6
a運算元
直接輸出#-a
7*操作符isp(『-』) < icp(『*』),進棧
#-*8
(操作符
isp(『*』) < icp(『(』),進棧
#-*(9(
操作符isp(『(』) < icp(『(』),進棧
#-*((10c
運算元直接輸出
#-*((c11
+操作符
isp(『(』) < icp(『+』),進棧
#-*((+12d
運算元直接輸出
#-*((+d13
)操作符
isp(『+』) > icp(『)』),退棧並輸出
#-*((+14
isp(『(』) = icp(『(』),直接退棧
#-*(15/
操作符isp(『(』) < icp(『/』),進棧
#-*(/16e
運算元直接輸出
#-*(/e17
-操作符
isp(『/』) > icp(『-』),退棧並輸出
#-*(/18
isp(『(』) < icp(『-』),進棧
#-*(-19f
運算元直接輸出
#-*(-f20
)操作符
isp(『-』) > icp(『)』),退棧並輸出
#-*(-21
isp(『(』) = icp(『(』),直接退棧
#-*22
+操作符
isp(『*』) > icp(『+』),退棧並輸出#-*
23isp(『-』) > icp(『+』),退棧並輸出#-
24isp(『#』) < icp(『+』),進棧
#+25
g運算元
直接輸出#+g
26#操作符isp(『+』) > icp(『#』),退棧並輸出#+
27isp(『#』) > icp(『#』),退棧,結束
嗯,這樣就足夠清楚了。程式後續再補上。
將中綴表示式轉化成字尾表示式
中綴變字尾主要的思想就是將需要的運算子先做乙個對映 對於任意表示式,式中從頭開始掃,遇到非運算子,即任意數字或字母直接輸出 遇到運算子考慮放入棧中 若棧空則放入 若棧不為空,判斷棧頂的優先順序是否 待放入的運算子,若 小於則將其壓入棧中 若不小於,則將棧一直 pop,知道運算子可以放入棧中 當然還有...
將中綴表示式轉化成字尾表示式(逆波蘭式)
直接上 中綴表示式 轉換成 字尾表示式 逆波蘭式 include include struct stack int get priority char c int isempty struct stack s struct stack createstack unsigned int len voi...
將中綴表示式轉化成字尾表示式來計算值
題目很簡單,就是給出乙個表示式 例如2 3 5 6 然後我們得出他的值。未接觸這個方法前,我是用了一種很複雜的方法 爆肝警告 將中綴表示式 就是我們要求的表示式 轉化成字尾表示式來解決就會比較簡單。對於中綴表示式和字尾表示式的概念這裡就不說了,只將方法呈現出來。例如乙個中綴表示式 a b c d e...