資料結構知識點總結

2021-10-01 11:34:48 字數 3039 閱讀 1063

佇列

用陣列表示迴圈佇列:

為了區分隊空和隊滿,入隊時少用乙個佇列元素,約定以「隊頭指標在隊尾指標的下乙個位置作為隊滿的標誌」,(也就是說如果隊尾快要趕上隊頭了就認為滿了)。也可以通過增加乙個資料成員size,記錄佇列中元素的數量。

對於佇列的鏈式儲存結構,不存在溢位的問題。

廣義表

例如建立乙個廣義表 ls = },我們可以這樣解釋此廣義表的構成:廣義表 ls 儲存了乙個原子 1 和子表 。

以下是廣義表儲存資料的一些常用形式:

a = ():a 表示乙個廣義表,只不過表是空的。

b = (e):廣義表 b 中只有乙個原子 e。

c = (a,(b,c,d)) :廣義表 c 中有兩個元素,原子 a 和子表 (b,c,d)。

d = (a,b,c):廣義表 d 中存有 3 個子表,分別是a、b和c。這種表示方式等同於 d = ((),(e),(b,c,d)) 。

e = (a,e):廣義表 e 中有兩個元素,原子 a 和它本身。這是乙個遞迴廣義表,等同於:e = (a,(a,(a,…)))。

使用鍊錶儲存廣義表,首先需要確定鍊錶中節點的結構。由於廣義表中可同時儲存原子和子表兩種形式的資料,因此鍊錶節點的結構也有兩種,如圖 1 所示:

如圖 所示,表示原子的節點由兩部分構成,分別是 tag 標記位和原子的值,表示子表的節點由三部分構成,分別是 tag 標記位、hp 指標和 tp 指標。tag 標記位用於區分此節點是原子還是子表,通常原子的 tag 值為 0,子表的 tag 值為 1。子表節點中的 hp 指標用於連線本子表中儲存的原子或子表,tp 指標用於連線廣義表中下乙個原子或子表。廣義表 } 的結構示意圖如下:

對廣義表ls=((),a,b,(a,b,c),(a,(a,b),c)),廣義表ls的長度:5,廣義表ls的深度:3

二叉樹的性質

****節點n的高度 : n節點到葉子節點所有路徑上包含節點個數的最大值。葉子節點的高度為1,往上節點的高度依次遞增。

****節點n的深度 : 從根節點到節點n唯一的路徑的長,根節點深度為1

****樹的高度:樹內所有節點高度的最大值,也就是根節點的高度,也就是數的層數

****樹的深度:樹內所有節點深度的最大值,也就是所有葉子節點深度的最大值,也就是樹的層數

n0=n2+1

二叉樹的遍歷:略

線索二叉樹

二叉搜尋樹

平衡二叉樹

左右子樹高度相差不超過1

哈夫曼編碼

若圖中兩個節點之間邊數多於一條,則稱為多重圖

若圖有n個頂點,有小於n-1條邊,則必為非連通圖

儲存方式為鄰接矩陣法和鄰接表法:

鄰接表中存在兩種節點:頂點表節點和邊表節點

bfs:採用鄰接表儲存時時間複雜度為o(n),採用鄰接矩陣儲存時時間複雜度為o(nn)。

dfs:採用鄰接表儲存時時間複雜度為o(n),採用鄰接矩陣儲存時時間複雜度為o(nn)。

時間複雜度為o(v*v),不依賴於邊,適合求解邊稠密的圖

採用堆來存放邊,故時間複雜度為o(nlogn)

dijkstra演算法:

floyd演算法:

拓撲排序:aov、aoe

外部排序(待完善)

時間代價主要取決於io次數

(1)按可用記憶體的大小,把外存上含有n個記錄的檔案分成若干個長度為l的子檔案,把這些子檔案依次讀入記憶體,並利用有效的內部排序方法對它們進行排序,再將排序後得到的有序子檔案重新寫入外存;

(2)對這些有序子檔案逐趟歸併,使其逐漸由小到大,直至得到整個有序檔案為止。

先從乙個例子來看外排序中的歸併是如何進行的?

假設有乙個含10000 個記錄的檔案,首先通過10 次內部排序得到10 個初始歸併段r1~r10 ,其中每一段都含1000 個記錄。然後對它們作如圖10.11 所示的兩兩歸併,直至得到乙個有序檔案為止 如下圖

順序查詢

asl(成功)=(n+1)/2,asl(不成功)=n

有序表中:asl(成功)=(n+1)/2,asl(不成功)=(1+2+…+n+n)/(1+n)

二分查詢

int

binarysearch

(int array,

int n,

int value)

return-1

;}

分塊查詢動態規劃後續再寫

資料結構知識點總結

1 樹 森林 和二叉樹可以相互轉化,規則是 左孩子右兄弟 即當前節點的左孩子在由二叉樹轉化為樹的過程中,左孩子還是當前節點的左孩子,而右節點會變成當前節點的兄弟。2 設二叉樹度為0的節點有n0個,度為2的節點為n2,則n2 n0 1 1 無向圖的資料結構是鄰接多重表,有向圖的資料結構是十字鍊錶。二者...

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

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 個記錄的進行快速排序,所需...