第 3 章
堆疊與佇列:排隊、疊放與流程順序
有些事情講究先來後到,有些事情則是後放上去的東西要先拿下來。堆疊與佇列,正是在描述不同的順序規則。
Stack & Queue
預計閱讀時間:約 5 分鐘
本章開場
早餐店點餐時,通常是照排隊順序處理;但如果你把一疊盤子疊在櫃子裡,最後放上去的那一個,往往也是最先被拿走的那一個。這兩種看似普通的順序,正好對應到佇列與堆疊。
本章要解決的問題
同樣是安排事情先後順序,有些流程需要公平排隊,有些流程則需要優先處理最後一步。要怎麼分辨哪種規則適合哪種場景,是本章的重點。
核心概念
佇列是先進先出,也就是先進來的人先被服務。堆疊則是後進先出,最後放上去的元素最先被取走。兩者都不是在比誰高級,而是在不同情境下維持合理秩序。
順序本身就是一種規則,而資料結構做的事,就是把規則變成可持續運作的安排方式。
這在生活中像什麼
超市結帳隊伍、掛號系統、客服等待名單,都很像佇列。它強調公平與流程穩定。相反地,疊衣服、堆盤子、瀏覽器上一頁功能,則更接近堆疊,因為最近一次動作通常最容易被反向處理。
具體例子
- 銀行叫號機(佇列):抽號碼牌、依序叫號,先來的人先被服務。不管中途有多少人進來,順序規則清楚不混亂。
- 印表機列印佇列(佇列):多人同時傳送文件,印表機照送出時間依序印出,第一份送出的先完成,新加入的排在最後。
- Ctrl + Z 撤銷(堆疊):每次編輯都被記錄在「操作堆疊」裡,按一下撤銷就退回上一步,再按退更上一步,永遠是最後那次動作先被取消。
- 瀏覽器「上一頁」按鈕(堆疊):你造訪的每一頁都被壓入歷史堆疊,按「上一頁」就從最頂端往下取,最近去過的頁面最先回到。
- 餐廳出菜順序(佇列):廚師依照出單時間出菜,先點先上,保持每桌等待的公平性。若改成亂序,客人容易抗議,廚房也容易搞混。
這在工作上有什麼用
客服工單若依進件順序處理,就是佇列思維;設計師的復原操作、文件編輯的撤銷紀錄,則常用堆疊思維。專案管理中,若遇到緊急事項插隊,還要再進一步搭配優先順序結構,單純佇列就可能不夠。
為什麼重要
- 它幫助我們釐清流程規則應該怎麼設計。
- 它讓系統在處理大量請求時更一致、更可預期。
- 它提醒我們:不同工作情境,需要不同的順序邏輯。
一句話總結
佇列在乎先來後到,堆疊在乎最後一次動作;選對順序規則,流程才會順。
💭 複習三問
- 你的工作流程是先來後到(FIFO)還是後進先出(LIFO)?
- 瀏覽器的「上一頁」功能背後用了堆疊,你能想到生活中哪個行為也是這種邏輯嗎?
- 你現在的待辦清單,是否維持了佇列的順序,還是常常被插隊打亂?