1
我想了解一個關於使用堆棧和隊列作爲編程計算器的方法的課題。我瞭解infix和postfix表達式是什麼,但是它如何使程序更容易評估表達式,以及爲什麼隊列和堆棧在這種情況下是理想的?由於使用堆棧和隊列的C++計算器
我想了解一個關於使用堆棧和隊列作爲編程計算器的方法的課題。我瞭解infix和postfix表達式是什麼,但是它如何使程序更容易評估表達式,以及爲什麼隊列和堆棧在這種情況下是理想的?由於使用堆棧和隊列的C++計算器
它使操作更簡單的順序來處理,例如:
+ * - 4 2 5 3
只能意味着
((4 - 2) * 5) + 3
這可能是我們更易讀,但我們需要知道訂單的操作和匹配圓括號來弄清楚。
作爲實現:如果你有一個堆棧,則可以處理上面的表達式如下:
+
(的操作),將其推入到堆棧,*
(操作),將其推入到堆棧,-
(的操作),將其推入到堆棧,4
(一個數字),該堆棧的頂部不是數字,所以將其推入到堆棧。2
(一個數字),堆棧頂部是一個數字,所以從堆棧彈出兩次,得到4 - 2
,計算它(2
),並將結果(2
)推送到堆棧上。5
(一個數字),堆棧的頂部是一個數字,所以從堆棧中彈出兩次,得到2 * 5
,將結果(10
)推送到堆棧上。3
(一個數字),堆棧頂部是一個數字,所以從堆棧彈出兩次,得到3 + 10
,將結果(13
)推送到堆棧上。13
)。所以,您可以看到,表達式使用一些簡單的規則進行評估,無需搜索整個字符串以查找括號,也無需確定乘法是否優先於加法和減法。
即使這幾乎是一歲......「3 + 10」是「13」而不是「30」:P – Casey 2013-01-18 20:33:21
@Casey謝謝。固定。 – trutheality 2013-01-22 18:06:37