iT邦幫忙

2026 iThome 鐵人賽

DAY 10
0
Software Development

30 天資料結構修行:從零開始理解資料結構系列 第 10 篇

Day 10 堆疊:最後放進去的,最先拿出來

  • 分享至 

  • xImage
  •  

我們想像桌上疊著幾本書:要放一本新書時,通常放在最上面;要拿書時,也先拿最上面的那一本。中間的書不能直接拿出來,必須先移開壓在上面的書。

堆疊(stack)就是依照類似規則管理資料的方式:資料從同一端放入,也從同一端取出。這一端稱為堆疊頂端(top)。

後進先出:堆疊的順序規則

堆疊遵守後進先出(Last In, First Out, LIFO):最後放進去的資料會最先被取出。

例如依序放入 A、B、C,C 最後放入,因此會最先取出;A 最早放入,會最後取出:

https://ithelp.ithome.com.tw/upload/images/20260924/201834093ifXVhEW01.png

可以把它想成只能從頂端操作的一疊書。若想拿出底下的 A,必須先拿走 C 和 B。堆疊的順序不是依照資料的大小或名稱決定,而是由放入和取出的先後順序決定。

放入資料:push

push 是把新資料放到堆疊頂端。假設堆疊原本有 A、B,再執行 push(C),C 會成為新的頂端:

https://ithelp.ithome.com.tw/upload/images/20260924/201834096EQuNoLKBZ.png

新資料永遠加在頂端,所以原本的資料順序仍然保留,只是頂端換成新資料。

取出資料:pop

pop 會移除並取出目前頂端的資料。若堆疊是 A、B、C,執行一次 pop 會取出 C,B 隨即成為新的頂端:

https://ithelp.ithome.com.tw/upload/images/20260924/20183409kXHcUbZjfW.png
pop 不只是讀取頂端資料,也會讓那筆資料離開堆疊。之後再執行 pop,取出的才會是 B。

查看頂端:peek

peek 用來查看目前頂端的資料,但不移除它。對 A、B、C 執行 peek,結果是 C,查看後堆疊仍然是 A、B、C:

https://ithelp.ithome.com.tw/upload/images/20260924/20183409O1Q4Itx4dS.png
因此,pop 和 peek 的差別在於:pop 會取出並移除頂端資料;peek 只查看資料,堆疊內容不變。

堆疊是空的時候

如果堆疊裡沒有任何資料,仍然呼叫 pop 或 peek,就沒有頂端資料可以取出或查看。這種對空堆疊執行 pop 或 peek 的錯誤稱為下溢(underflow)。實際操作前要先確認堆疊不是空的,才能安全地取出或查看頂端資料。

堆疊適合什麼情況?

當一件事需要依照「最近發生的先處理」的順序進行,堆疊就很適合。例如使用復原功能時,通常會先取消最近一次的操作,再往前取消更早的操作。這和堆疊最後放入的操作先被取出的順序相同。

小結

堆疊只從頂端放入和取出資料,因此形成後進先出的順序。理解每個操作是否會改變堆疊,就能分清楚 push、pop 和 peek 的用途;操作空堆疊前,也要留意下溢問題。

今日重點:

  • 堆疊從頂端放入和取出資料,遵守後進先出(LIFO)。
  • push 把資料放到頂端;pop 移除並取出頂端資料。
  • peek 只查看頂端,不會移除資料。
  • 空堆疊沒有資料可供 pop 或 peek;對空堆疊執行這兩個操作會造成下溢。

下一篇將認識佇列,看看資料如何依照「先進先出」的順序進出。


上一篇
Day 9|單向、雙向與環狀鏈結串列
下一篇
Day 11|排隊輪到誰?佇列與環狀佇列
系列文
30 天資料結構修行:從零開始理解資料結構 共 15 篇
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言