原住民族考試四等考試-電子工程類科計算機概要105 年第 16 題單選題
考慮堆疊(stack)的操作方式,「用鏈結串列(linked list)實作堆疊」比「用陣列(array)實作堆疊」有何優點?
A鏈結串列較適合從堆疊中刪除任一資料
B鏈結串列較適合從堆疊中任一位置插入新的資料
C在取出(pop)資料時,鏈結串列所需的時間複雜度較低
D在推入(push)資料時,鏈結串列比較不需擔心滿溢(overflow)問題正確答案
D正確答案
鏈結串列動態配置記憶體,push 時不會像固定陣列那樣有容量上限,較不怕 overflow。
為什麼答案是 D
陣列實作需事先宣告固定大小,滿了就 overflow;鏈結串列動態向系統要記憶體,只要記憶體夠就能一直 push,較不怕溢位。
載入中…
完整詳解
Pro · 無限重點 鏈結串列動態配置記憶體,push 時不會像固定陣列那樣有容量上限,較不怕 overflow。
陣列最大缺點=大小固定會溢位,鏈結串列最大優點=動態成長,直接選 D。
逐選項分析
A✕
堆疊本質是 LIFO,只能從頂端 pop,不能刪除任一資料。這是堆疊的定義限制,跟用什麼實作無關。
B✕
同理,堆疊只能從頂端 push,不允許任意位置插入。若能任意插入就不是堆疊而是串列了。
C✕ 陷阱
兩者 pop 時間複雜度都是 O(1),鏈結串列並無較快。甚至因為指標跳躍,實際常數時間可能更慢。
D✓ 正確
陣列實作需事先宣告固定大小,滿了就 overflow;鏈結串列動態向系統要記憶體,只要記憶體夠就能一直 push,較不怕溢位。
陣列 vs 鏈結串列實作堆疊
| 比較項目 | 陣列實作 | 鏈結串列實作 | 勝出方 |
|---|
| 記憶體配置 | 靜態、固定大小 | 動態、可擴充 | 鏈結串列 |
| Overflow 風險 | 容易滿溢 | 僅受記憶體限制 | 鏈結串列 |
| Push/Pop 時間 | O(1) | O(1) | 平手 |
| 額外空間 | 無需指標 | 需儲存 next 指標 | 陣列 |
| 存取速度 | 快(連續記憶體) | 慢(指標跳躍) | 陣列 |
A、B 是陷阱:乍看「鏈結串列靈活」很合理,但別忘了堆疊的 LIFO 規則限制——不論用什麼實作,都不能從中間插入或刪除,否則就違反堆疊的定義了。