從最簡單的例子出發:
1 + 2 ×3 / 4
轉換成字尾表示式:
1 2 3 × 4 / +
關鍵是要理解:字尾表示式是借用堆疊的**先出來實現運算的,即:
上述的表示式可以以佇列形式寫出,然後借用堆疊進行計算:
如果是運算元,壓棧,
如果是操作符,一次性彈出兩個,分別是運算元2和運算元1
在理解這個原因的基礎上,再看,中綴和字尾之間怎麼轉換
即運算元和操作符分開對待,轉換的結果可以用佇列儲存,但是,對於操作符的順序就需要借用一下堆疊了。
觀察可發現,字尾表示式的操作符之前一定有兩個以上的運算元,如果,在從中綴轉換的時候,操作符是需要先暫存一下的,比如這裡:
+先用堆疊暫存,然後×,且比+優先順序高,先暫存,然後/,這時候,×和/的優先順序相等,且×的運算元已經入佇列,這時候可以考慮將×彈出入佇列。
而最後,當運算元都入佇列以後,堆疊裡如果還有操作符的話那麼從頂到底的操作符優先順序一定是從高到低的,這正好符合轉換後的要求,直接彈出插入列隊即可。
中綴表示式轉換字尾表示式
中綴表示式是最自然 最易被人類理解的表達方式,但是計算機處理起來並不顯得方便,這時,字尾表示式就發揮作用了 例如 計算表示式 a b c d 的值,程式裡需要不斷的判斷運算子的優先順序,先計算括號裡的子表示式 假如我們將上述表示式轉換為字尾表示式 a b c d 你會發現現在是不需要括號了 這時我們...
表示式轉換 中綴表示式轉換為字尾表示式
算術表示式有字首表示法 中綴表示法和字尾表示法等形式。日常使用的算術表示式是採用中綴表示法,即二元運算子位於兩個運算數中間。請設計程式將中綴表示式轉換為字尾表示式。輸入格式 輸入在一行中給出不含空格的中綴表示式,可包含 以及左右括號 表示式不超過20個字元。輸出格式 在一行中輸出轉換後的字尾表示式,...
中綴表示式轉換為字尾表示式
今天我們課前談一談,要說點什麼好呢?最近小甲魚發現,很多魚油在學習資料結構和演算法的時候積極性已經開始有點下降了。甚至很多朋友懷疑資料結構和演算法到底有沒有用?實話說,在大廈的防震設計 消除疾病 防止水源枯竭這些實際問題中,很遺憾,資料結構和演算法幾乎起不到任何直接作用。那為什麼我們要學呢?很簡單,...