1. 程式人生 > 實用技巧 >前、中、字尾表示式問題

前、中、字尾表示式問題

表示式概述
字首表示式
波蘭邏輯學家J.Lukasiewicz於1929年提出的另一種表示表示式的方法。
運算子位於運算元之前,不怎麼常用。。。
字首表示式求值:

從右至左掃描,遇到表示式---->壓入堆疊、遇到操作符---->彈出棧頂的兩個元素,用這個操作符進行運算並將運算結果入棧。重複以上操作將整個表示式掃描完畢,最後棧中的元素就是結果。
中綴轉換成字首:

  1. 定義兩個棧s1為為運算子棧,s2為結果棧
  2. 從右邊開始遍歷中綴表示式
  3. 遇到運算元則將其壓入s2
  4. 遇到運算子號則比較其與s1棧頂符號的運算優先順序
    在這裡插入圖片描述
    5.遇到括號:
    右括號 壓入s1
    左括號 依次彈出s1並壓入s2直到遇到右括號為止然後再彈出右括號!!
    6.重複重複直至遍歷完成
    7.若s1中有剩餘則彈出併入s2
    8.按彈出順序彈出s2元素 over!

字尾表示式
也叫逆波蘭表示式(與字首相反 運算子位於運算元之後)計算機常用
字尾求值方式:從左至右掃描,遇到表示式---->壓入堆疊、遇到操作符---->彈出棧頂的兩個元素,用這個操作符進行運算並將運算結果入棧。重複以上操作將整個表示式掃描完畢,最後棧中的元素就是結果。(和字首相反)
中綴轉化為字尾:

  1. 定義兩個棧s1為為運算子棧,s2為結果棧
  2. 左邊開始遍歷中綴表示式
  3. 遇到運算元則將其壓入s2
  4. 遇到運算子號則比較其與s1棧頂符號的運算優先順序

在這裡插入圖片描述
注意與字首的不同(第二個不包含等於)(第四點包含等於)

5.遇到括號:
左括號 壓入s1
右括號 依次彈出s1並壓入s2直到遇到左括號為止然後再彈出左括號
6.重複重複直至遍歷完成
7.若s1中有剩餘則彈出併入s2
8.按彈出順序彈出s2元素 over!

具體程式後續更新。