資料結構知識點總結

2021-08-13 20:17:32 字數 1431 閱讀 4861

1、樹(森林)和二叉樹可以相互轉化,規則是「左孩子右兄弟」,即當前節點的左孩子在由二叉樹轉化為樹的過程中,左孩子還是當前節點的左孩子,而右節點會變成當前節點的兄弟。

2、設二叉樹度為0的節點有n0個,度為2的節點為n2,則n2=n0+1

1、無向圖的資料結構是鄰接多重表,有向圖的資料結構是十字鍊錶。二者都可以使用鄰接表

2、使得圖從偏序到全序的遍歷序列即拓撲排序,拓撲排序要求圖是無環的。形成乙個有序的拓撲序列的充要條件是圖的鄰接矩陣為三角矩陣。

3、使得無向圖為連通圖的,至少有v-1條邊,而有向圖為v條,即成環。

4、若要保證連通n個結點的無向圖,則需要9個結點的完全圖+本身,即c(9,2)+1

5、圖的最小生成樹演算法:

(1)prim和kruskal演算法都採用了優先佇列作為資料結構。

(2)兩種演算法都不能用作有向圖的最小生成樹(或者應該叫做最小生成樹形)

(3)從實現上來講kruskal更簡單一點。。。

(4)時間複雜度:prim:kruskal==elogv:eloge 空間複雜度:v:e

6、拓撲排序:

(1)要求:dag有向無環圖,權重為正,使用棧作為輔助儲存的資料結構,即深度優先搜尋得到的逆後序。

(2)時間複雜度:e+v 是無環圖中的最優演算法

7、dijkstra演算法

(0)時間複雜度:elogv,使用斐波那契堆最好可以達到e+vlogv,在最壞情況下依然有較好的效能。

(1)和prim演算法十分相近,複雜度一樣(採用鄰接矩陣/鄰接表的時候為n²,使用優先佇列和斐波那契堆能到(m+n)logn)

。區別在於prim演算法是計算無向圖的,dijkstra是計算有向圖的(當然無向圖也能算,就每次新增邊的時候鄰接矩陣新增兩個頂點即可)。 而prim每次是加入離最近的非樹頂點,而dijkstra是每次加入離

起點最近的非樹頂點。

(2)(3)和kosaraju的比較:

相同點:都採用了拓撲序列作為訪問順序,都要取反(乙個是反向圖,乙個是權重取相反數),時間複雜度 都是線性時間。

區別:乙個是求無環加權有向圖中的最長/短路徑,乙個是求有向圖中的強連通分量

8、bellman-ford演算法

資料結構:採用佇列(spfa),乙個boolean型陣列,防止重複加入佇列,入隊後置為true,出隊後置為false

時間複雜度:ev(每一輪中都會放鬆e條邊,持續v輪,即將整個圖每條邊都放鬆),最好情況下和拓撲排序一樣是e+v,適用領域廣泛。

解決問題:檢測並判定負權重環是否存在,權重可正可負,有效解決最短路徑問題,套匯問題:即尋找負權重環。

當所有邊放鬆v輪(即應該結束迴圈之後)之後,且僅當佇列非空時,有向圖中才存在負權重環。

資料結構知識點總結

佇列 用陣列表示迴圈佇列 為了區分隊空和隊滿,入隊時少用乙個佇列元素,約定以 隊頭指標在隊尾指標的下乙個位置作為隊滿的標誌 也就是說如果隊尾快要趕上隊頭了就認為滿了 也可以通過增加乙個資料成員size,記錄佇列中元素的數量。對於佇列的鏈式儲存結構,不存在溢位的問題。廣義表 例如建立乙個廣義表 ls ...

資料結構知識點總結(五)

1 對於單鏈表 1 帶頭節點鍊錶判空條件 head next null 2 不帶頭節點鍊錶判空條件 head null 3 對於迴圈鍊錶判空條件 head next head 4 對於雙鏈表判空條件 head next head prior head2 1 順序棧判空條件 s.top s.base ...

資料結構知識點總結(一)

1 大多數排序演算法都有比較關鍵字大小和改變指向記錄的指標或移動記錄本身兩種基本操作。2 快速排序在任何情況下都比其他排序方法速度快。3 快速排序演算法在每一趟排序中都能找到乙個元素放在其最終位置上。4 如果某種排序演算法不穩定,則該排序方法就沒有實際應用價值。5 對 n 個記錄的進行快速排序,所需...