跳轉到內容

軟體工程師手冊/生命週期/設計/選擇資料結構

來自華夏公益教科書

資料結構概述

[編輯 | 編輯原始碼]

存在大約幾種標準的資料結構型別。

  • 堆疊
  • 佇列
  • 更多內容即將推出...

這些可以透過各種方式實現,但每種結構的特定特徵始終保持不變。

簡而言之,堆疊是遵循後進先出 (LIFO) 正規化的集合資料。這意味著,放入堆疊的最後一個專案是第一個被取出的專案。除了此專案以外,其他專案無法直接訪問或移除,除非完全清除堆疊。

以下是人們可以對堆疊執行的常見操作

  • push - 將某項放入堆疊頂端
  • pop - 彈出堆疊頂端(最後一個放入的專案)
  • peek - 檢視堆疊頂端的專案(最後一個放入的專案)
  • is_empty - 檢查堆疊是否為空
  • is_full - 檢查堆疊是否已滿

請記住,人們實現堆疊的具體方式可能完全不同,這可能導致堆疊上可用的方法也有所不同。例如,如果堆疊是靜態的(無法增長)並且大小為 N,則使用 is_full 方便地判斷堆疊是否已滿。但是,如果堆疊是動態的(如果需要,可以增長),則當堆疊在技術上無法填滿時,is_full 就不方便。儘管有些人可能選擇使用具有上限的動態堆疊,這使得 is_full 再次有用。此外,這取決於建立堆疊的開發人員的風格。最起碼,總會存在類似 push 或 pop 的操作,儘管它們的名稱可能不同。

一些堆疊的具體示例

  • 想想 Pez 糖果分配器 - 你放進去的最後一顆糖果是第一個被拿出來的。
  • 這裡還有一個示例 - 自助餐線的餐盤分配器。餐盤堆放在彈簧載入的平臺上,顧客從最上面逐個拿取。

一些與計算機相關的示例

  • RPN(逆波蘭表示法)計算器。

美國國家標準與技術研究院堆疊頁面

佇列是遵循先進先出 (FIFO) 正規化的集合資料。這意味著放入佇列的第一個資料也是從佇列中返回的第一個資料。無法從佇列中隨機訪問專案,只能訪問處於“第一個”位置的專案。如果你想從時間的角度來考慮,陣列中最舊的專案是第一個返回的專案,也是唯一可以訪問的專案。

以下是佇列可以執行的常見操作

  • enqueue - 將某項放入佇列末尾
  • dequeue - 移除佇列中的第一個專案(最舊的專案)
  • is_full - 檢查佇列是否已滿
  • is_empty - 檢查佇列是否為空

與堆疊一樣,is_full(也許還有 is_empty)在不同的實現(靜態陣列、動態陣列、連結串列……等等)中可能有用也可能沒有用。哪些方法可用,還取決於建立佇列的開發人員的風格。最起碼,總會存在 enqueue 和 dequeue,儘管它們的名稱可能不同。

一些佇列的具體示例

  • 遊樂園的遊樂設施隊伍 - 最前面的人,等待時間最長,最先玩(或下一個玩)。
  • 銀行的隊伍,人們在等待下一個空閒的櫃檯。

美國國家標準與技術研究院佇列頁面

選擇資料結構

[編輯 | 編輯原始碼]

書籍和文章

[編輯 | 編輯原始碼]

美國國家標準與技術研究院

華夏公益教科書