利用棧的四則運算

2021-10-07 13:22:21 字數 782 閱讀 4086

利用表示式求值首先要會將中綴表示式變為字尾表示式,過程如下:

中綴表示式:(a+b)*c-d/e = ( ( (a+b)c ) - (d/e) ),將符號移到對應括號的後面。

字尾表示式:ab+cde/-。

將表示式轉化為字尾後能方便利用棧進行計算。

利用棧來化為字尾表示式的步驟如下:

從左往右掃瞄中綴表示式。當讀到數字時,加入字尾表示式。讀到操作符時,將其與操作符棧頂進行比較,如果當前符號優先順序高或為棧空,就壓入棧。否則,乙個個往外pop到字尾表示式中,直到當前操作符的優先順序比棧頂的高,才將其push。

比較難理解的是,為什麼遇到優先順序更高的就push,而更低的出現就要pop?

首先要知道計算機算時不會先看後面的,所以我們得把先算的放前面。而在四則運算中是有優先順序的,優先順序高的即使順序上在後面也要先進行計算。而棧是filo,所以可以利用棧來實現先算優先順序更高的運算。而如果優先順序並不更高就要遵守「在前面的先算」的原則了。所以要pop完優先順序更高或一樣的。

但如果中綴表示式中有括號呢?

括號的優先順序是最高的,要先算。所以對括號的處理:當遇到』(『時,壓入操作符棧;當遇到』)『時,因為括號裡的要先算,所以一直pop直到』('出現。

而有了字尾表示式,計算就十分方便了。如果是數字,就壓入棧,如果是操作符,就pop兩個數字,計算後放回棧中。最後只會剩下乙個數,就是結果。

注意點:

因為棧是filo,所以後乙個彈出的數字在運算中是在前面的。

除法可能導致小數,數字型別設定為浮點。

有兩個棧:操作符棧在生成字尾表示式時使用,數字棧在計算時使用。

Python 棧 四則運算

首先了解一下棧 棧是限定僅在表尾進行插入和刪除操作的線性表。允許插入與刪除的一段叫做棧頂,另一端 叫做棧底,不含任何資料元素的棧稱為空棧。棧又稱為後進先出 last in first out 的線性 表,簡稱lifo結構。在python中,可以用列表來實現棧 lt 3 相當於壓棧 print lt ...

棧 實現四則運算

題目描述 給定乙個字串描述的算術表示式,計算出結果值。輸入字串長度不超過100,合法的字元包括 0 9 字串內容的合法性及表示式語法的合法性由做題者檢查。本題目只涉及整型計算。題目描述 給定乙個字串描述的算術表示式,計算出結果值。輸入字串長度不超過100,合法的字元包括 0 9 字串內容的合法性及表...

棧應用 四則運算

輸入字串格式的算術表示式,如 3 2 輸出去結果。棧的應用 四則運算分為下列四個過程 讀取字串 並不是簡單地讀入,比如 當字串中有兩位數,例如12時,我們應該讀成 12 而不是 1 2 不然運算會出現錯誤 處理字串,給字串加0 為了保證字尾運算的正常執行,需要對出現的負數進行考慮。例如 4 3 為了...