儲存結構是指資料結構在計算機中的表示（又稱映像），也稱物理結構。它包括資料元素的表示和關係的表示。資料的儲存結構是用計算機語言實現的邏輯結構，它依賴於計算機語言。資料的儲存結構主要有順序儲存、鏈式儲存、索引儲存和雜湊儲存。 儲存結構在計算機科學中具有重要意義，因為它們直接影響資料的存取效率和儲存空間的利用率。不同的儲存結構適用於不同的應用場景，選擇合適的儲存結構可以顯著提高程式的效能和可維護性。 儲存結構 順序儲存 順序儲存是將邏輯上相鄰的元素儲存在物理位置上也相鄰的儲存單元中，元素之間的關係由儲存單元的鄰接關係來體現。其優點是可以實現隨機存取，每個元素佔用最少的儲存空間；缺點是插入和刪除操作可能需要移動大量元素。 鏈式儲存 鏈式儲存不要求邏輯上相鄰的元素在物理位置上也相鄰，藉助指示元素儲存地址的指標來表示元素之間的邏輯關係。其優點是不會出現碎片現象，能充分利用所有儲存單元；缺點是每個元素因儲存指標而佔用額外的儲存空間，訪問速度較慢，因為需要遍歷連結串列。 索引儲存 索引儲存在儲存元素資訊的同時，還建立附加的索引表。索引表中的每項稱為索引項，索引項的一般形式是（關鍵字，地址）。其優點是檢索速度快；缺點是附加的索引表額外佔用儲存空間。另外，增加和刪除資料時也要修改索引表，因而會花費較多的時間。 雜湊儲存 雜湊儲存根據元素的關鍵字直接計算出該元素的儲存地址，又稱雜湊（Hash）儲存。其優點是檢索、增加和刪除結點的操作都很快；缺點是若雜湊函式不好，則可能出現元素儲存單元的衝突，而解決衝突會增加時間和空間開銷。 儲存結構的發展歷史和重要貢獻者 順序儲存 順序儲存的概念可以追溯到早期的計算機科學發展時期，當時主要用於陣列和矩陣的實現。John von Neumann 是順序儲存結構的早期貢獻者之一，他在計算機體系結構方面的工作奠定了現代計算機科學的基礎。順序儲存的早期應用包括磁鼓儲存器和磁帶儲存器，這些技術在 20 世紀 50 年代和 60 年代被廣泛使用。 鏈式儲存 鏈式儲存的概念由 Allen Newell、Cliff Shaw 和 Herbert A Simon 在 1956 年提出，他們在開發邏輯理論家（Logic Theorist）時首次使用了連結串列。連結串列是一種基本的資料結構，廣泛應用於各種計算機科學領域。鏈式儲存的早期應用包括磁芯儲存器，這種儲存器在 20 世紀 50 年代末和 60 年代初被廣泛使用。 索引儲存 索引儲存的概念在資料庫管理系統的發展過程中逐漸形成。Edgar F Codd 在 1970 年提出了關係資料庫模型，他的工作極大地推動了索引儲存結構的發展。B 樹和 B 樹是索引儲存的重要實現，由 Rudolf Bayer 和 Edward M McCreight 在 1972 年提出。B 樹和 B 樹在資料庫索引和檔案系統中得到了廣泛應用。 雜湊儲存 雜湊儲存的概念由 H P Luhn 在 1953 年提出，他在資訊檢索系統中首次使用了雜湊函式。Donald Knuth 在他的經典著作《計算機程式設計藝術》中詳細討論了雜湊儲存，並對其理論基礎做出了重要貢獻。雜湊儲存在資料庫、檔案系統和快取系統中得到了廣泛應用。 示例程式碼 順序儲存 以下是一個使用陣列實現順序儲存的示例程式碼（Python）： 順序儲存示例：陣列 array 1 2 3 4 5 插入元素 arrayappend 6 刪除元素 arrayremove 3 訪問元素 print array 2 輸出：3 鏈式儲存 以下是一個使用連結串列實現鏈式儲存的示例程式碼（Python）： 鏈式儲存示例：連結串列 class Node def __init__self data selfdata data selfnext None class LinkedList def __init__self selfhead None def append self data new_node Node data if not selfhead selfhead new_node return last selfhead while lastnext last lastnext lastnext new_node def print_list self current selfhead while current print currentdata end current currentnext print None 使用連結串列 ll LinkedList llappend 1 llappend 2 llappend 3 llprint_list 輸出：1 2 3 None 索引儲存 以下是一個使用 B 樹實現索引儲存的示例程式碼（Python）： 索引儲存示例：B 樹 class BTreeNode def __init__self leafFalse selfleaf leaf selfkeys selfchildren class BTree def __init__self t selfroot BTreeNode True selft t def insert self k root selfroot if len rootkeys 2 selft 1 temp BTreeNode selfroot temp tempchildreninsert 0 root selfsplit_child temp 0 selfinsert_non_full temp k else selfinsert_non_full root k def insert_non_full self x k i len xkeys 1 if xleaf xkeysappend None None while i 0 and k xkeys i xkeys i 1 xkeys i i 1 xkeys i 1 k else while i 0 and k xkeys i i 1 i 1 if len xchildren ikeys 2 selft 1 selfsplit_child x i if k xkeys i i 1 selfinsert_non_full xchildren i k def split_child self x i t selft y xchildren i z BTreeNode yleaf xchildreninsert i 1 z xkeysinsert i ykeys t 1 zkeys ykeys t2 t 1 ykeys ykeys 0t 1 if not yleaf zchildren ychildren t2 t ychildren ychildren 0t 使用 B 樹 btree BTree 3 btreeinsert 10 btreeinsert 20 btreeinsert 5 btreeinsert 6 btreeinsert 12 btreeinsert 30 btreeinsert 7 btreeinsert 17 雜湊儲存 以下是一個使用雜湊表實現雜湊儲存的示例程式碼（Python）： 雜湊儲存示例：雜湊表 class HashTable def __init__self selfsize 10 selftable for _ in range selfsize def hash_function self key return hash key selfsize def insert self key value hash_key selfhash_function key key_exists False bucket selftable hash_key for i kv in enumerate bucket k v kv if key k key_exists True break if key_exists bucket i key value else bucketappend key value def delete self key hash_key selfhash_function key bucket selftable hash_key for i kv in enumerate bucket k v kv if key k del bucket i break def search self key hash_key selfhash_function key bucket selftable hash_key for k v in bucket if key k return v return None 使用雜湊表 hash_table HashTable hash_tableinsert key1 value1 hash_tableinsert key2 value2 print hash_tablesearch key1 輸出：value1 hash_tabledelete key1 print hash_tablesearch key1 輸出：None 參考文獻