1. 程式人生 > >資料結構與演算法(1)- 資料結構概覽

資料結構與演算法(1)- 資料結構概覽

宣告:雖然本系列部落格與具體的程式語言無關。但是本文作者對c++相對比較熟悉,其次是java,所以難免會有視角上的偏差。舉例也大多是和這兩門語言相關。

今天先來看看有哪些常見的資料結構(C++ STL視角,其他應該也大同小異吧。哈哈,我猜的!)。所以之後的內容大多從STL出發,然後順便對比下java中對應的資料結構。作為一名合格的軟體開發人員,我們有時不需要深入對這些結構進行深度瞭解(原子級瞭解),但是至少我們得知道這些結構的基本原理、構成以及代價(時間空間代價)。如果你想對這些結構深度瞭解,建議閱讀《STL原始碼剖析》這本書,java的話可以直接讀相關的原始碼就行了。這個系列部落格只會分析這些結構的基本原理、代價以及應用時注意的細節,而不會用程式碼實現。那麼廢話不多說,先來個表:

表1 資料結構一覽表
序列容器 關聯容器
vector RB_tree
list set
deque map
stack multiset
queue multimap
heap hashtable
priority_queue hash_set
slist hash_map
  hash_multiset
  hash_multimap

C++ STL裡將上表出現的這些重要的資料結構稱為容器。容器也就是裝東西之物,資料結構乃是裝資料之物。這麼理解資料結構其實很簡單。說白了資料結構就是構造了一塊空間,然後制定了/構造了一些規則來更方便的管理和操作這些資料。那麼根據“資料在容器中的排列”特性,這些資料結構可以分為序列式(sequence)和關聯式(associative)兩種。

所謂序列式容器,其中的元素都可序(ordered),但未必有序(sorted)。  --侯捷

所謂關聯式容器,觀念上類似關聯式資料庫(實際上則簡單許多):每筆資料(每個元素)都有一個鍵值(key)和一個實值(value)。                                                                                                       --侯捷

所以這下子我們就清楚啦,表1左側的資料都是可序的,右側的資料資料都是由鍵值對構成的。那麼他們到底有啥區別呢,又有什麼效能上的差異呢,空間佔用又是啥情況呢?這些問題就隨著我們的部落格一步一步來揭開咯。

小祕密:下一篇將講解序列容器中的vector。另外可以透漏個小祕密,根據資料組織的不同序列式容器大致可以分為三種哦!一是基於陣列的,一是基於列表,再是基於樹結構的喲。

See you next time. Happy Coding!!!

我的GitHub​​​​​​​