2012-03-04 31 views
1

我想了解一個關於使用堆棧和隊列作爲編程計算器的方法的課題。我瞭解infix和postfix表達式是什麼,但是它如何使程序更容易評估表達式,以及爲什麼隊列和堆棧在這種情況下是理想的?由於使用堆棧和隊列的C++計算器

回答

4

它使操作更簡單的順序來處理,例如:

+ * - 4 2 5 3 

只能意味着

((4 - 2) * 5) + 3 

這可能是我們更易讀,但我們需要知道訂單的操作和匹配圓括號來弄清楚。

作爲實現:如果你有一個堆棧,則可以處理上面的表達式如下:

  1. +(的操作),將其推入到堆棧,
  2. *(操作),將其推入到堆棧,
  3. -(的操作),將其推入到堆棧,
  4. 4(一個數字),該堆棧的頂部不是數字,所以將其推入到堆棧。
  5. 閱讀2(一個數字),堆棧頂部是一個數字,所以從堆棧彈出兩次,得到4 - 2,計算它(2),並將結果(2)推送到堆棧上。
  6. 閱讀5(一個數字),堆棧的頂部是一個數字,所以從堆棧中彈出兩次,得到2 * 5,將結果(10)推送到堆棧上。
  7. 閱讀3(一個數字),堆棧頂部是一個數字,所以從堆棧彈出兩次,得到3 + 10,將結果(13)推送到堆棧上。
  8. 沒有剩下要讀,從堆棧彈出並返回結果(13)。

所以,您可以看到,表達式使用一些簡單的規則進行評估,無需搜索整個字符串以查找括號,也無需確定乘法是否優先於加法和減法。

+3

即使這幾乎是一歲......「3 + 10」是「13」而不是「30」:P – Casey 2013-01-18 20:33:21

+0

@Casey謝謝。固定。 – trutheality 2013-01-22 18:06:37