基礎觀念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)
- 能舉出至少一個各自的生活應用例子