前綴(波蘭)、中綴、後綴表達式(逆波蘭)

前綴表達式、中綴表達式、後綴表達式都是四則運算的表達方式,用以四則運算表達式求值

中綴表達式就是常見的運算表達式,如(3+4)×5-6

前綴表達式又稱波蘭式,前綴表達式的運算符位於操作數之前   如- × + 3 4 5 6

後綴表達式又稱逆波蘭表達式,與前綴表達式相似,只是運算符位於操作數之後 如:3 4 + 5 × 6 -

前綴表達式的計算機求值

     從右至左掃描表達式,遇到數字時,將數字壓入堆棧,遇到運算符時,彈出棧頂的兩個數,用運算符對它們做相應的計算(棧頂元素 op 次頂元素),並將結果入棧;重複上述過程直到表達式最左端,最後運算得出的值即爲表達式的結果

中綴轉前綴

(1) 初始化兩個棧:運算符棧S1和儲存中間結果的棧S2;
(2) 從右至左掃描中綴表達式;
(3) 遇到操作數:將其壓入S2;
(4) 遇到運算符:比較其與S1棧頂運算符的優先級:
       (4-1) 如果S1爲空,或棧頂運算符爲右括號“)”,則直接將此運算符入棧;
       (4-2) 否則,若優先級比棧頂運算符的較高或相等,也將運算符壓入S1;
       (4-3) 否則,將S1棧頂的運算符彈出並壓入到S2中,再次轉到(4-1)與S1中新的棧頂運算符相比較;
(5) 遇到括號時:
      (5-1) 如果是右括號“)”,則直接壓入S1;
      (5-2) 如果是左括號“(”,則依次彈出S1棧頂的運算符,並壓入S2,直到遇到右括號爲止,此時將這一對括號丟棄;
(6) 重複步驟(2)至(5),直到表達式的最左邊;
(7) 將S1中剩餘的運算符依次彈出並壓入S2;
(8) 依次彈出S2中的元素並輸出,結果即爲中綴表達式對應的前綴表達式。

後綴表達式的計算機求值

     從左至右掃描表達式,遇到數字時,將數字壓入堆棧,遇到運算符時,彈出棧頂的兩個數,用運算符對它們做相應的計算(次頂元素 op 棧頂元素),並將結果入棧;重複上述過程直到表達式最右端,最後運算得出的值即爲表達式的結果

中綴轉後綴

(1)從左到右掃描中綴表達式;
(2)遇到操作數:直接輸出(加入到後綴表達式中)
(3)遇到左括號:將其入棧(括號是最高優先級,無需比較,入棧後優先級降到最低,確保其他符號正常入棧)
(4)遇到右括號:(意味着括號已結束)不斷彈出棧頂運算符並輸出直到遇到左括號(左括號彈出但不輸出)
(5)遇到其他運算符:將該運算符與棧頂運算符進行比較,
        若優先級高於棧頂運算符則壓入堆棧,
        若優先級低於等於棧頂運算符則將棧頂運算符彈出並輸出,然後比較新的棧頂運算符,直到優先級大於棧頂運算符或者棧空,再              將該運算符入棧.
(6)如果對象處理完畢,則按順序彈出並輸出棧中所有運算符.

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章