資料結構與演算法

與陣列相比,鏈結串列(各元素持有指向下一個元素位置之指標的串列)的特徵,下列何者正確?

  1. A若已知插入位置的前一個元素,只要改接指標就能插入,不必移動其他元素;但要讀取第 i 個元素,必須從開頭依序走訪
  2. B可以計算出第 i 個元素的位置,因此任何元素都能以固定時間 O(1) 讀取
  3. C元素在記憶體中緊密連續排列,因此依序讀取時快取與預取容易發揮效果
查看答案與解析

正確答案:A. 若已知插入位置的前一個元素,只要改接指標就能插入,不必移動其他元素;但要讀取第 i 個元素,必須從開頭依序走訪

在鏈結串列中,只要知道插入或刪除的位置,改寫前後的指標即可,只需 O(1)。另一方面,要讀取第 i 個元素必須從開頭追蹤 i 次指標,需要 O(n)。陣列可由起始位址與元素大小算出第 i 個元素的位址,因此能以 O(1) 讀取,但在中間插入時需要把後面的元素往後挪,要花 O(n)。此外,陣列的元素連續排列,快取與預取容易發揮效果;鏈結串列的節點容易散落在記憶體各處,即使同樣是 O(n) 的走訪,也可能慢上許多。

  • A. 正確。插入與刪除只需改接指標,但依位置讀取時要從開頭走訪。
  • B. 以計算求出位址並以 O(1) 讀取,是陣列的特徵。
  • C. 元素連續排列、快取容易發揮效果的是陣列。鏈結串列的元素容易分散。
練習這個領域 前往領域頁面

相關計算工具

資料結構與演算法的其他題目

  1. 對空的堆疊依序進行 push 1、push 2、pop、push 3、push 4、pop、pop 的操作。依序排列以 pop 取出的值,下列何者正確?
  2. 對空的佇列依序放入 A、B、C,取出1個,放入 D 後取出1個,再放入 E 後取出1個。依序排列取出的元素,下列何者正確?
  3. 以逆波蘭表示法(後序式)寫成的算式「3 4 + 2 * 5 −」,用「遇到數字就推入堆疊,遇到運算子就取出2個值計算並推入結果」的方法求值。結果為多少?其中運算子左側的值是先推入的那一個。
  4. 關於雜湊表中碰撞(collision)的說明,下列何者正確?
  5. 在大小為7(位置0~6)的雜湊表中,以雜湊函數 h(k) = k mod 7 依序存放鍵10、17、24、3。發生碰撞時,使用把位置逐一往後移(6的下一個是0)來尋找空位置的線性探測法。鍵3會存放在哪個位置?