資料結構是在程式裡儲存資料以方便處理的方法,不同的資料結構有各自的優點與缺點,選擇適當的資料結構可以使得資料的查找、添增或刪除更有效率。舉例來說,當你要去圖書館借某一本書時,會先查到那本書的索書號,再到對應的書櫃找到正確的位置,再根據書櫃上更細部的編號去找到那本書的位置。在這個例子中,書本就是我們要儲存的資料,這個圖書館存放書籍的方法就可以稱為一種資料結構。
一般來說,資料結構的「操作」可以分為兩種:
在程式設計中,設計良好的資料結構便是針對操作的種類和頻繁程度進行評估,進而提出對應適合的解決方案。就好比當我們將圖書館視作一個資料結構時,若書本的編排凌亂不堪,身為借書人的我們肯定會頭暈目眩,這也是為什麼圖書館會提出索書號,並精心規劃書櫃的編排方法──因為這才能迎合大量借書人的「查詢操作」。
C++ 的標準模板庫(Standard template library, STL)提供許多十分強大的內建資料結構可以使用,熟悉這些工具既可以減少許多賽場上不必要的精力花費,又可以降低出錯的可能性。
這裡會先介紹最基本的資料結構,包含堆疊 stack
、佇列 queue
、動態陣列 vector
、鏈接串列 linked list
和一些比較進階的:priority queue
、map
、set
等資料結構。前四個基本資料結構建議自己要實作看看,之後大部分都是用 STL 的東西,知道概念之後就可以直接用。
學習資料結構時,重要的大多都是要熟悉其用法和變化題,但前四個資料結構一定要自己寫出來一遍,知道資料結構內部運作的方式。
若要使用 STL 的話,會需要引用對應的標頭檔和命名空間,這方面的資訊建議讀者先參考章節實作技巧 / 基本常識。引用 STL 後,我們就可以使用 STL 提供的函式進行這些資料結構的各種操作,而不一定需要知道實作的細節,只要清楚每個資料結構的用處即可。也因此,在接下來的章節中我們便會和大家簡介各種資料結構的基礎知識。