中綴:正常表示式
字尾:逆波蘭式
1、棧中存符號
2、字母、數字直接列印
3、先進棧,再比較優先順序,只有當比棧中前乙個符號優先順序高的情況下才走下去,否則彈出前乙個符號,直至前乙個符號的優先順序小於這個符號,也即是連續彈棧。
4、列印的時候遇到括號不計在內,但是在棧中括號是被儲存過的,當遇到)時,按照「先進後出」的原則彈出()裡的全部符號
5、最終,彈出棧中全部符號
字首:「波蘭式」
(1) 首先構造乙個運算子棧(也可放置括號),運算子(以括號為分界點)在棧內遵循越往棧頂優先順序不降低的原則進行排列。
(2)從右至左掃瞄中綴表示式,從右邊第乙個字元開始判斷:
如果當前字元是數字,則分析到數字串的結尾並將數字串直接輸出。
如果是運算子,則比較優先順序。如果當前運算子的優先順序大於等於棧頂運算子的優先順序(當棧頂是括號時,直接入棧), 則將運算子直接入棧;否則將棧頂運算子出棧並輸出,直到當前運算子的優先順序大於等於棧頂運算子的優先順序(當棧頂是括號時,直接入棧),再將當前運算子入棧。
如果是括號,則根據括號的方向進行處理。如果是向右的括號,則直接入棧;否則,遇向左的括號前將所有的運算子全部出棧並輸出,遇右括號後將向左、向右的兩括號一起出棧(並不輸出)。
(3) 重複上述操作(2)直至掃瞄結束,將棧內剩餘運算子全部出棧並輸出,再逆綴輸出字串。中綴表示式也就轉換為字首表示式了。
例子:a+b ---> +,a,b
a+(b-c) ---> +,a,-,b,c
a+(b-c)*d ---> +,a,*,-,b,c,d
a+1+3 ---> +,+,a,1,3
總結起來就是:字尾是從左往右,字首是從右往左
常見考題形式:
1、字首表示式轉為中綴表示式即字首表示式的計算機求值:
從右至左掃瞄表示式,遇到數字時,將數字壓入堆疊,遇到運算子時,彈出棧頂的兩個數,用運算子對它們做相應的計算(棧 頂元素 op 次頂元素),並將結果入棧;重複上述過程直到表示式最左端,最後運算得出的值即為表示式的結果。
例如字首表示式「- × + 3 4 5 6」:
(1) 從右至左掃瞄,將6、5、4、3壓入堆疊;
(2) 遇到+運算子,因此彈出3和4(3為棧頂元素,4為次頂元素,注意與字尾表示式做比較),計算出3+4的值,得7,再將7入棧;
(3) 接下來是×運算子,因此彈出7和5,計算出7×5=35,將35入棧;
(4) 最後是-運算子,計算出35-6的值,即29,由此得出最終結果。
2、字尾表示式轉為中綴表示式即字尾表示式的計算機求值:
與字首表示式類似,只是順序是從左至右:
從左至右掃瞄表示式,遇到數字時,將數字壓入堆疊,遇到運算子時,彈出棧頂的兩個數,用運算子對它們做相應的計算(次頂元素 op 棧頂元素),並將結果入棧;重複上述過程直到表示式最右端,最後運算得出的值即為表示式的結果。
例如字尾表示式「3 4 + 5 × 6 -」:
(1) 從左至右掃瞄,將3和4壓入堆疊;
(2) 遇到+運算子,因此彈出4和3(4為棧頂元素,3為次頂元素,注意與字首表示式做比較),計算出3+4的值,得7,再將7入棧;
(3) 將5入棧;
(4) 接下來是×運算子,因此彈出5和7,計算出7×5=35,將35入棧;
(5) 將6入棧;
(6) 最後是-運算子,計算出35-6的值,即29,由此得出最終結果。
中綴 字首 字尾表示式 相互轉換
1.中綴表示式 便於人看 2.字首表示式 波蘭式 運算子在前面,運算數在後面 3.字尾表示式 逆波蘭式 運算數在前面,運算子在後面 中綴 字首 優先順序先乘除再加減,入棧方向從右往左,棧外的符號想進棧,棧內的符號想出棧。棧外左括號不能進棧,棧外右括號優先順序最高。棧內右括號優先順序最低。中綴 字尾 ...
資料結構06 棧 中綴 字首 字尾
1.字首表示式 波蘭表示式 運算子位於運算元之前 3 4 5 6 求值機制 自右向左掃瞄整個字首表示式,遇到數字壓棧 遇到運算子,彈出棧頂和次棧頂元素,進行計算後重新入棧 2.中綴表示式 就是我們常見的表示式 3 4 5 6 3.字尾表示式 逆波蘭表示式 運算子位於運算元之後 3 4 5 6 求值機...
資料結構 字首 中綴 字尾表示式求值以及相互轉換
字首 中綴 字尾表示式求值以及相互轉換 一 表示式求值問題 1.字首表示式求值問題 從右向左掃瞄,遇到數字時,將數字壓入棧,遇到運算子時候,把棧內前兩個數字彈出,先彈出的數字放在運算子前面,然後進行相應運算,並將計算結果入棧。重複直到表示式最右端。例 字首表示式是 1 2 3 從右向左掃瞄 a 將數...