資料結構 第六章學習小結

2022-09-13 17:45:24 字數 1946 閱讀 2692

思維導圖

演算法小結

1. 鄰接矩陣儲存

1

#define mvnum 100 //

最大頂點數

2 typedef char vertextype;//

假設頂點的資料型別為字元型

3 typedef int arctype;//

假設邊的權值型別為整型

45 typedef struct

6arcnode;

1112 typedef struct vnode//

頂點13

vnode,adjlist[mvnum];//

adjlist表示鄰接表型別

1718 typedef struct

//鄰接表

19algraph;

基於鄰接表的儲存結構

3. dfs演算法

1

void dfs_am(amgraph g, intv)2

基於鄰接矩陣的dfs演算法

1

void dfs_al(algraph g, intv)2

1617 }

基於鄰接表的dfs演算法

4. bfs演算法

1 #include2

void bfs(graph g, intv)3

20}21}

22 }

基於鄰接矩陣的bfs演算法

1 #include2

void bfs(graph g, intv)3

22 p = p->nextarc; //

p指向下乙個邊結點 23}

24}25 }

基於鄰接表的bfs演算法

5.(補充)非聯通圖的遍歷

1

//非連通圖需遍歷所有的連通分量,因此另需乙個遍歷函式

2void

tr**erse(graph g)3

11 }

非連通圖的遍歷演算法

其他知識點小結

1. 使用鄰接表儲存無向圖,為什麼要足夠稀疏才合算?

2. 使用鄰接矩陣a儲存無向網路,若vi與vj之間不存在邊,則a[i][j]值為多少?

答:若權值為正整數,可設為0或負數。若權值為整數,則可設為乙個大於所有邊權值的數。

3. 最小生成樹不一定唯一,但是用演算法來查詢的最小生成樹一般是唯一的(排除使用隨機數計算的情況)

4. 重置visit陣列(用於判斷頂點是否被訪問)

① for迴圈重置

②⚠memset函式重置(更簡潔)

1

//適用於初始化、重新賦值以及清空等情況 2//

memset()函式在標頭檔案string.h裡

3 #include

4int visit[100

]; 5 menset(visit, 0, sizeof(visit));//

第乙個引數是陣列名,第二個引數是設定的值,第三個引數是陣列長度

menset()函式

心得體會

1.圖需要學習的基本術語較多,但可以大致了解一些比較重要的術語,對於其他的可以接觸到再學以致用;

2.另外由於圖定義時涉及到的成員變數較多,做題目的時候經常要對照著書本或者前面的**確認是否寫正確_(:з)∠)_;

3. 總體來說,目前對於圖的應用的演算法基本理解,但自己復現起來可能會生疏,此外感覺自己對於鄰接矩陣的上手熟練程度遠超於鄰接表,可能對於鍊錶的寫法不夠熟練....之後應該多回顧一下。

資料結構第六章小結

第六章主要學習圖,感覺有蠻多概念和演算法要去記住,可能會造成混淆 在學習過程中,感覺不是實打實的掌握,還得多看看書。思維導圖如下 個人小測中 1 使用鄰接矩陣a儲存無向網路,若i號頂點與j號頂點之間不存在邊,則a i j 值為多少 連通圖中 鄰接矩陣 連通為1,不連通為0,無向網路連通為權值,不連通...

第六章 資料結構

存放同一種資料型別的多個元素的容器,通過索引 記憶體偏移量 進行元素的訪問,陣列的大小一旦確定就不能改變。陣列其實也是線性表結構,在記憶體中陣列的元素是緊挨著連續儲存的。特點 查詢快 增刪慢 舉例 定義乙個陣列 int arr new int 想在2的後面插入乙個新的元素11,這時候就需要定義乙個新...

第六章學習小結

第六章主要進行有關圖的學習,這一章學得東西很多,涉及圖的方方面面包括如何定義儲存結構,如何初始化,如何建立一張圖,如何進行圖的操作等等。6 1主要學習了圖的基本知識,不帶權圖包括有向圖,無向圖,帶權圖包括有向網路,無向網路。在求度的時候要注意無向圖和有向圖的區別,有向圖包括入度和出度。連通分量 最大...