前綴表達式、中綴表達式和后綴表達式


前綴、中綴、后綴表達式

前綴、中綴、后綴表達式是對表達式的不同記法,其區別在於運算符相對於操作數的位置不同,前綴表達式的運算符位於操作數之前,中綴和后綴同理

舉例:
中綴表達式:1 + (2 + 3) × 4 - 5
前綴表達式:- + 1 × + 2 3 4 5
后綴表達式:1 2 3 + 4 × + 5 -


## 中綴表達式 中綴表達式是一種通用的算術或邏輯公式表示方法,操作符以中綴形式處於操作數的中間。中綴表達式是人們常用的算術表示方法。 雖然人的大腦很容易理解與分析中綴表達式,但對計算機來說中綴表達式卻是很復雜的,因此計算表達式的值時,通常需要先將中綴表達式轉換為前綴或后綴表達式,然后再進行求值。 對計算機來說,計算前綴或后綴表達式的值非常簡單
## 前綴表達式

前綴表達式的運算符位於兩個相應操作數之前,前綴表達式又被稱為前綴記法或波蘭式

前綴表達式的計算機求值

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

示例:
計算前綴表達式的值:- + 1 × + 2 3 4 5

  1. 從右至左掃描,將5,4,3,2壓入堆棧;
    2)遇到+運算符,彈出2和3(2為棧頂元素,3為次頂元素),計算2+3的值,得到5,將5壓入棧;
    3)遇到×運算符,彈出5和4,計算5×4的值,得到20,將20壓入棧;
    4)遇到1,將1壓入棧;
    5)遇到+運算符,彈出1和20,計算1+20的值,得到21,將21壓入棧;
    6)遇到-運算符,彈出21和5,計算21-5的值,得到16為最終結果

可以看到,用計算機計算前綴表達式是非常容易的,不像計算后綴表達式需要使用正則匹配


## 后綴表達式

后綴表達式與前綴表達式類似,只是運算符位於兩個相應操作數之后,后綴表達式也被稱為后綴記法或逆波蘭式

后綴表達式的計算機求值

與前綴表達式類似,只是順序是從左至右:

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

示例:
計算
計算后綴表達式的值:1 2 3 + 4 × + 5 -

1)從左至右掃描,將1,2,3壓入棧;
2)遇到+運算符,3和2彈出,計算2+3的值,得到5,將5壓入棧;
3)遇到4,將4壓入棧
4)遇到×運算符,彈出4和5,計算5×4的值,得到20,將20壓入棧;
5)遇到+運算符,彈出20和1,計算1+20的值,得到21,將21壓入棧;
6)遇到5,將5壓入棧;
7)遇到-運算符,彈出5和21,計算21-5的值,得到16為最終結果


## 中綴表達式轉化為前綴和后綴表達式

轉化步驟:

  1. 按照運算符的優先級對所有的運算單位加括號
  2. 將運算符移動到對應括號的前面(前綴表達式)或后面(后綴表達式)
  3. 去掉括號,得到前綴或后綴表達式

示例:

中綴表達式:1+(2+3)×4-5

1)加括號
式子變成 ((1+((2+3)×4))-5)

2)移動運算符

對於前綴表達式,變成了 -(+(1×(+(23)4))5)

對於后綴表達式:變成了((1((23)+4)×)+5)-

3)去掉括號
前綴表達式: - + 1 × + 2 3 4 5
后綴表達式:1 2 3 + 4 × + 5 -


## 小結 - 前綴、中綴、后綴是根據運算符與操作數的相對位置來划分的 - 中綴表達式符合人的計算習慣,而前綴和后綴表達式適合計算機計算 - 前綴表達式和后綴表達式計算的時候都是從一個方向掃描表達式,遇到數字壓入棧,遇到運算符彈出棧頂的兩個數進行運算並將結果入棧,重復知道結束 - 前綴和后綴表達式已經內在地包含運算順序,因此不用括號來確定優先級


免責聲明!

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



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