1.字首表示式(波蘭表示式):運算子位於運算元之前 - * + 3 4 5 6
求值機制:自右向左掃瞄整個字首表示式,遇到數字壓棧;遇到運算子,彈出棧頂和次棧頂元素,
進行計算後重新入棧
2.中綴表示式:就是我們常見的表示式(3+4)*5-6
3.字尾表示式(逆波蘭表示式):運算子位於運算元之後 3 4 + 5 * 6 -
求值機制:自左向右掃瞄整個字尾表示式,遇到數字時壓棧;遇到運算子時,彈出棧頂和次棧頂
元素,進行計算後重新入棧
1.初始化兩個棧:運算子棧s1和中間結果的棧s2
2.從左至右掃瞄中綴表示式
3.遇到運算元時,將其壓入s2中
4.遇到操作符時,比較其餘s1棧頂運算子的優先順序
(1)如果s1為空,或棧頂運算子為左括號"(",則直接將此符號壓入s1
(2)如果優先順序比棧頂運算子優先順序高,也將符號壓入s1中
(3)否則,將s1棧頂的運算子彈出並壓入s2中,再次轉到4.(1)與s1中新的
棧頂運算子進行比較
5.遇到括號時:
(1)如果是左括號"(",則直接入棧
(2)如果是右括號")",則依次彈出s1棧頂的運算子,並壓入s2,直到遇到
左括號"("為止,此時將這一對括號丟棄
6.重複步驟2至5,直到掃瞄到表示式的最右邊
7.將s1中剩餘的運算子依次彈出,並壓入s2中
8.依次彈出s2中的元素並輸出,結果的逆序即為中綴表示式對應的字尾表示式
資料結構 棧 中綴 字尾 字首相互轉換
中綴 正常表示式 字尾 逆波蘭式 1 棧中存符號 2 字母 數字直接列印 3 先進棧,再比較優先順序,只有當比棧中前乙個符號優先順序高的情況下才走下去,否則彈出前乙個符號,直至前乙個符號的優先順序小於這個符號,也即是連續彈棧。4 列印的時候遇到括號不計在內,但是在棧中括號是被儲存過的,當遇到 時,按...
資料結構 字首 中綴 字尾表示式
字首表示式 字首表示式是一種沒有括號的算數表示式,它將運算子寫在前面,運算元寫在後面 中綴表示式 操作符處於運算元的中間。中綴表示式是人們常用的算術表示方法 字尾表示式 運算子位於運算元之後 字首表示式 123 中綴表示式 1 2 3 7 字尾表示式 12 5 6 1 字首表示式 規則 從右向左遍歷...
資料結構棧之中綴表示式轉字尾
對於乙個中綴表示式,假設a b a b 我們對它從左至右進行遍歷,當遇到運算元時直接輸出 當遇到操作符且棧為空時,將操作符壓入棧 當遇到左括號時,將其入棧 當遇到右括號時,將棧中左括號上面的元素依次出棧並輸出,最後將左括號出棧 但不輸出 當遇到操作符時 此時棧非空 當棧頂元素也為操作符且優先順序大於...