基礎觀念30 min read

Day 8:基本資料結構(資料怎麼排隊)

Stack(疊盤子,後進先出)跟 Queue(排隊買排骨飯,先進先出),搞懂兩種排隊方式的差別與應用。

寫程式常常需要決定「資料要用什麼順序處理」。今天要學的兩種基本資料結構,分別對應到生活中你每天都會遇到的兩種排隊方式。這是 13 天轉職甄試衝刺大綱的 Day 8。

📅 前言:資料也要排隊,但排隊方式不只一種

你有沒有想過,「電梯」跟「排隊買排骨飯」的排隊邏輯完全相反?程式的世界裡,這兩種排隊方式分別叫做 Stack(堆疊)Queue(佇列)

⏳ 第 1~15 分鐘:堆疊(Stack)—— 後進先出

💡 生活比喻: 想像洗碗後疊起來的一疊盤子。你只能從最上面拿盤子,也只能把新洗好的盤子放在最上面。最後疊上去的盤子,反而是最先被拿走的。

這個規則叫做 LIFO(Last In, First Out,後進先出)

最常見的應用例子:

  • 瀏覽器上一頁: 每點一個新網頁,就疊上去一層;按上一頁,就是把最上面那層拿掉,回到前一個。
  • 程式呼叫(Call Stack): 函式 A 呼叫函式 B,函式 B 呼叫函式 C——C 最先執行完,再回到 B,最後才回到 A,跟疊盤子的順序一模一樣。
  • 括號匹配: 檢查 ( [ { } ] ) 這種括號有沒有配對正確,常用堆疊來實作。

⏳ 第 16~25 分鐘:佇列(Queue)—— 先進先出

💡 生活比喻: 想像在排隊買排骨飯。第一個來排隊的人,理所當然應該第一個買到——不會有人插隊從隊伍尾巴先拿到飯。

這個規則叫做 FIFO(First In, First Out,先進先出)

最常見的應用例子:

  • 排隊系統: 銀行叫號、超商結帳,先來的先服務。
  • 印表機佇列: 你把 3 份文件依序送去列印,印表機會照「送出的順序」一份一份印,不會突然先印最後送出的那份。
  • BFS(廣度優先搜尋): 一種常見的搜尋演算法,會用佇列來決定「下一個要探索誰」。

⏳ 第 26~30 分鐘:一張表秒懂差異

比較項目Stack(堆疊)Queue(佇列)
規則LIFO(後進先出)FIFO(先進先出)
生活比喻疊盤子排隊買排骨飯
拿資料的位置最新放進去的那個最早放進去的那個
常見應用瀏覽器上一頁、call stack、括號匹配排隊系統、印表機佇列、BFS

📝 小練習與解答

練習: 依序把 1、2、3 放進 Stack 和 Queue,請問「第一個被拿出來」的分別是哪個數字?

  • Stack(堆疊): 答案是 3。因為最後放進去的(3)在最上面,會最先被拿出來。
  • Queue(佇列): 答案是 1。因為最早放進去的(1)排在隊伍最前面,會最先被服務。

🎯 目標

  • 能解釋 Stack 和 Queue 的核心規則差異(LIFO vs FIFO)
  • 能舉出至少一個各自的生活應用例子