數據結構(四):棧的應用之表達式求值

1、表達式求值

問題描述:

用戶從控制檯輸入一個數學表達式(所有輸入均合法),數學表達式只包含四則運算,程序需輸出表達式對應的結果,如:

輸入:(1+2)*3+4-5

輸出:8

解題思路:

涉及到的數學符號有 +、-、*、/、(、)。

因爲左邊的 + 比右邊的 + 優先級要高,所以我們在判斷符號優先級的時候還要帶上方向。

帶上方向的符號優先級表爲(0表示相等,1表示左邊比右邊大,-1表示小):

橫右豎左

+

-

*

/

+

1

1

-1

-1

-1

1

-

1

1

-1

-1

-1

1

*

1

1

1

1

-1

1

/

1

1

1

1

-1

1

-1

-1

-1

-1

0

0

1

1

1

1

0

0

兩個相同優先級的符號總是左邊的優先級比右邊的高。

  1. 初始化兩個棧,一個用來保存操作數,另一個用來保存操作符。
  2. 從控制檯讀取一個字符。
  3. 如果是操作數則壓入操作數棧中。
  4. 如果是操作符,與操作符棧棧頂元素比較
  5. 若優先級高於棧頂元素,壓入操作符棧
  6. 否則取出操作符棧棧頂元素和操作數棧棧頂的兩個元素進行運算,並將運算結果壓入操作數棧中。
  7. 繼續執行第 4步
  8. 判斷是否輸入結束(遇到換行)
  9. 若輸入結束,將操作符棧中的元素逐個彈出進行運算
  10. 否則繼續第 2步
  11. 返回計算結果

代碼請看:棧及其應用

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章