資料結構 總論

2021-09-26 07:39:33 字數 1547 閱讀 6092

一、常用資料結構

陣列  —— 連續儲存單元儲存

鍊錶  —— 連續指標節點

佇列  —— 先進先出

棧     —— 先進後出

堆     —— 通常是乙個可以被看做一棵樹的陣列物件

樹     —— 非線性層級資料結構

圖     —— 很少用到

hashmap   —— 一種陣列和鍊錶組合的資料結構

hashtable  —— 一種陣列和鍊錶組合的資料結構

二、陣列

陣列是很多語言中都內建的核心資料結構,它是乙個連續的記憶體塊,支援按索引直接查詢,時間複雜度為o(1)。但插入元素和刪除元素的操作比較麻煩,最差情況下的時間複雜度為o(n)。

在很多封裝的資料結構中,陣列都是重要的組成成分,因為它是連續的記憶體,可支援指標定址操作。但是在操作時需要注意的是邊界溢位問題,因而,在陣列記憶體不足時需要關心的操作往往是,原記憶體被銷毀,新記憶體開闢時帶來的系統開銷。

陣列操作的乙個典型特例是記憶體池管理技術。

其他:待補充。

三、鍊錶

鍊錶是一種物理儲存單元上非連續、無順序的儲存結構,它由一系列的節點組成,每個節點包含一組資料部分和乙個或多個指向下乙個節點的指標。鍊錶的非連續和指標特點讓鍊錶元素的插入和刪除變得很簡單,但相應的,查詢工作則變得不是很容易。通常,在已知插入點的情況下,插入/刪除新元素的時間複雜度為o(1),最壞情況下查詢的時間複雜度為o(n)。

按照鍊錶節點的指標個數不同,鍊錶可分為:單向鍊錶,雙向鍊錶,多向鍊錶。

按照鍊錶中是否存在環形結構,鍊錶可分為:有環鏈表和無環鏈表。

【單鏈表】

單向鍊錶的常見操作:

建立鍊錶、鍊錶查詢、插入或刪除元素、鍊錶反向、鍊錶銷毀。

單鏈表高階操作:

鍊錶元素去重、查詢鍊錶中間節點、查詢鍊錶倒數第 k 個節點、合併兩個排序鍊錶、查詢兩個鍊錶第乙個公共節點、查詢鍊錶的環。

【雙向鍊錶】

【多向鍊錶】

不多見。

四、佇列

佇列和棧是在結構上相近的資料結構,有時他們可以相互轉換。不同的是,佇列是先進先出結構,棧是先進後出結構。他們的

典型操作是:push(壓入)和 pop(彈出)。佇列是一種操作受限制的線性表,通常使用鍊錶或者陣列來實現。

單鏈佇列

迴圈佇列

陣列佇列

五、棧

六、堆

七、樹

樹是由n(n>0)個有限節點組成乙個具有層次關係的集合。

把它叫做「樹」是因為它看起來像一棵倒掛的樹,也就是說它是根朝上,而葉朝下的。樹具有以下的特點:

常見二叉樹:

3)紅黑樹

4)b 樹

5)b+ 樹

6)b* 樹

特殊的樹:

1)字典樹

2)決策樹

3)默克爾帕特里夏樹

八、圖

資料結構與演算法總論

void foo listnode head 資料結構與演算法 自然所有的資料結構都會具有的性質是結構特性 structure 但對於其他一些資料結構來說,比如優先佇列或者堆 二叉堆 左式堆 還存在著有序性。無論是棧 佇列還是優先佇列,都可視為一種快取結構,可將資料元素儲存其中,可以訪問和彈出。資料...

資料結構 資料結構緒論

資料結構是相互間存在一種或多種特定關係的資料元素的集合。程式設計 資料結構 演算法 資料結構是一門研究非數值計算的程式設計問題中的操作物件,以及他們之間的關係和操作等相關問題的學科。資料元素是組成資料的 有一定意義的基本單位,是計算機中通常作為整體處理,也被稱為記錄。乙個資料元素可以由若干個資料項組...

資料結構 資料結構演算法

分治法 對於乙個規模為n的問題,若該問題可以容易地解決 比如說規模n較小 則直接解決 否則將其分解為k個規模較小的子問題,這些子問題互相獨立且與原問題形式相同,遞迴地解這些子問題,然後將各子問題的解合併得到原問題的解。動態規劃法 這種演算法也用到了分治思想,它的做法是將問題例項分解為更小的 相似的子...