數據結構與算法——棧(三)有關棧的三種表達式 —— 前綴、中綴、后綴表達式


三種表達式 —— 前綴、中綴、后綴表達式

前綴表達式(波蘭表達式)

前綴表達式又稱為 波蘭表達式,前綴表達式的 運算符位於操作數之前

例如:( 2 + 3 ) × 4 – 5 對應的前綴表達式為:- × + 2 3 4 5

注意:前面這個表達式是一個中綴表達式,對應的是后面的這個前綴表達式。它的符號出現的順序與中綴的順序不一致。

前綴表達式中的符號順序,就是他求值的規定了

前綴表達式求值過程

  1. 右到左 掃描表達式

  2. 遇到 數字 時,將數字壓入堆棧

  3. 遇到 運算符

    1)彈出棧頂的兩個數(棧頂和次頂),用運算符對它們做相應的計算,並將結果入棧。

    ​ 計算順序是: 彈出來的 (運算符) 彈出來的

然后重復以上步驟,直到表達式的最左端,最后運算出的值則是表達式的值。

看完前綴表達式的計算邏輯,那么你要明白的是,從一個 中綴表達式 轉換為 前綴表達式 時,優先級順序是已經處理好的,因為在求值時,不進行優先級的判定

例如:(3+4)x5-6 對應的前綴表達式為:- x + 3 4 5 6,前綴表達式求值步驟如下:

  1. 從右到左掃描,將 6、5、4、3 壓入棧

  2. 遇到 + 運算符時:

    將彈出 3 和 4(3 為棧頂元素,4 為次頂元素),計算出 3 + 4 = 7,將結果壓入棧

  3. 遇到 x 運算符時

    將彈出 7 和 5,計算出 7 x 5 = 35,將 35 壓入棧

  4. 遇到 - 運算符時

    將彈出 35 和 6,計算出 35 - 6 = 29,壓入棧

  5. 掃描結束,棧中留下的唯一一個數字 29 則是表達式的值

中綴表達式

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

中綴表達式的求值是人類最熟悉的,但是對於計算機來說卻不好操作:

  • 需要計算運算符的優先級
  • 處理括號優先級

因此,在計算結果時,往往會將 中綴表達式 轉成其他表達式,一般轉成后綴表達式

后綴表達式(逆波蘭表達式)

后綴表達式 又稱為 逆波蘭表達式,與前綴表達式類似,只是 運算符 位於 操作數之后

比如:(3+4)x5-6 對應的后綴表達式 3 4 + 5 x 6 -

再比如:

中綴表達式 后綴表達式
a + b a b +
a + (b-c) a b c -
a+(b-c)*d a b c - d * +
a+d*(b-c) a d b c - * +
a=1+3 a 1 3 + =

后綴表達式求值過程

  1. 左到右 掃描表達式

  2. 遇到 數字 時,將數字壓入堆棧

  3. 遇到 運算符

    彈出棧頂的兩個數(棧頂和次頂),用運算符對它們做相應的計算,並將結果入棧。

    計算順序是: 彈出來的 (運算符) 彈出來的

    同樣的也不用考慮符號優先級的問題

然后重復以上步驟,直到表達式的最右端,最后運算得出的值即為表達式的結果。

比如:(3+4)x5-6 對應的后綴表達式 3 4 + 5 x 6 -

  1. 從左到右掃描,將 3、4 壓入堆棧

  2. 掃描到 + 運算符時

    將彈出 4 和 3,計算 3 + 4 = 7,將 7 壓入棧

  3. 將 5 入棧

  4. 掃描到 x 運算符時

    將彈出 5 和 7 ,計算 7 x 5 = 35,將 35 入棧

  5. 將 6 入棧

  6. 掃描到 - 運算符時

    將彈出 6 和 35,計算 35 - 6 = 29,將 29 壓入棧

  7. 掃描表達式結束,29 是表達式的值,由此得出最終結果


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM