阿摩線上測驗 登入

申論題資訊

試卷:112年 - 112 經濟部所屬事業機構_新進職員甄試_統計資訊:資料庫及資料探勘、程式設計#116958
科目:國營事業◆1.資料庫及資料探勘 2.程式設計
年份:112年
排序:0

題組內容

五、在計算機科學中,「stack」是 1 種常見的資料結構,請回答下列問題:(3 題,共 15 分)

申論題內容

(二)請以 2 個實際應用案例具體說明如何使用「stack」?(6 分)

詳解 (共 1 筆)

詳解 提供者:hchungw

(二) 使用「stack」的兩個實際應用案例

案例 1:表達式求值

在計算機科學中,堆疊常用於計算算術表達式,特別是中綴(infix)、前綴(prefix)和後綴(postfix)表達式的轉換和求值。這裡以後綴表達式求值為例。

後綴表達式求值

  1. 後綴表達式是一種表示方式,操作符在操作數之後。例如,中綴表達式 3 + 4 * 2 / (1 - 5) 可以表示為後綴表達式 3 4 2 * 1 5 - / +。
  2. 求值方法
    • 從左到右掃描後綴表達式。
    • 遇到操作數,將其壓入堆疊。
    • 遇到操作符,彈出堆疊頂端的兩個操作數,進行相應的運算,並將結果壓回堆疊。
    • 最終堆疊中剩下的唯一一個數即為表達式的值。

示例: 假設有後綴表達式 3 4 2 * 1 5 - / +,求值過程如下:

  • 初始:堆疊空。
  • 讀到 3,壓入堆疊:[3]
  • 讀到 4,壓入堆疊:[3, 4]
  • 讀到 2,壓入堆疊:[3, 4, 2]
  • 讀到 *,彈出 2 和 4,計算 4 * 2 = 8,壓入堆疊:[3, 8]
  • 讀到 1,壓入堆疊:[3, 8, 1]
  • 讀到 5,壓入堆疊:[3, 8, 1, 5]
  • 讀到 -,彈出 5 和 1,計算 1 - 5 = -4,壓入堆疊:[3, 8, -4]
  • 讀到 /,彈出 -4 和 8,計算 8 / -4 = -2,壓入堆疊:[3, -2]
  • 讀到 +,彈出 -2 和 3,計算 3 + -2 = 1,壓入堆疊:[1]
  • 最終結果:堆疊中剩下的數字 1 即為表達式的值。

案例 2:括號匹配

括號匹配是另一個使用堆疊的典型應用,用於檢查程式碼中括號是否正確配對,特別是在編譯器和語法分析器中。

括號匹配

  1. 算法描述
    • 從左到右掃描字符串。
    • 遇到開括號((, [, {),將其壓入堆疊。
    • 遇到閉括號(), ], }),檢查堆疊頂端是否為對應的開括號:
      • 若是,彈出堆疊頂端的開括號,繼續掃描。
      • 若否或堆疊為空,則括號不匹配。
    • 最終檢查堆疊是否為空,若是,則所有括號匹配;若否,則括號不匹配。

示例: 假設有字符串 "{[()()]}",檢查括號匹配過程如下:

  • 初始:堆疊空。
  • 讀到 {,壓入堆疊:[{]
  • 讀到 [,壓入堆疊:[{, []
  • 讀到 (,壓入堆疊:[{, [, (]
  • 讀到 ),彈出堆疊頂端 (,匹配,堆疊:[{, []
  • 讀到 (,壓入堆疊:[{, [, (]
  • 讀到 ),彈出堆疊頂端 (,匹配,堆疊:[{, []
  • 讀到 ],彈出堆疊頂端 [,匹配,堆疊:[{]
  • 讀到 },彈出堆疊頂端 {,匹配,堆疊空。
  • 結束:堆疊空,所有括號匹配。

這兩個案例展示了堆疊在處理表達式求值和括號匹配中的應用,說明了堆疊在管理後進先出(LIFO)資料上的便利性和有效性。