思維導圖
演算法小結
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基於鄰接矩陣的dfs演算法void dfs_am(amgraph g, intv)2
1基於鄰接表的dfs演算法void dfs_al(algraph g, intv)2
1617 }
4. bfs演算法
1 #include2基於鄰接矩陣的bfs演算法void bfs(graph g, intv)3
20}21}
22 }
1 #include2基於鄰接表的bfs演算法void bfs(graph g, intv)3
22 p = p->nextarc; //
p指向下乙個邊結點 23}
24}25 }
5.(補充)非聯通圖的遍歷
1非連通圖的遍歷演算法//非連通圖需遍歷所有的連通分量,因此另需乙個遍歷函式
2void
tr**erse(graph g)3
11 }
其他知識點小結
1. 使用鄰接表儲存無向圖,為什麼要足夠稀疏才合算?
2. 使用鄰接矩陣a儲存無向網路,若vi與vj之間不存在邊,則a[i][j]值為多少?
答:若權值為正整數,可設為0或負數。若權值為整數,則可設為乙個大於所有邊權值的數。
3. 最小生成樹不一定唯一,但是用演算法來查詢的最小生成樹一般是唯一的(排除使用隨機數計算的情況)
4. 重置visit陣列(用於判斷頂點是否被訪問)
① for迴圈重置
②⚠memset函式重置(更簡潔)
1menset()函式//適用於初始化、重新賦值以及清空等情況 2//
memset()函式在標頭檔案string.h裡
3 #include
4int visit[100
]; 5 menset(visit, 0, sizeof(visit));//
第乙個引數是陣列名,第二個引數是設定的值,第三個引數是陣列長度
心得體會
1.圖需要學習的基本術語較多,但可以大致了解一些比較重要的術語,對於其他的可以接觸到再學以致用;
2.另外由於圖定義時涉及到的成員變數較多,做題目的時候經常要對照著書本或者前面的**確認是否寫正確_(:з)∠)_;
3. 總體來說,目前對於圖的應用的演算法基本理解,但自己復現起來可能會生疏,此外感覺自己對於鄰接矩陣的上手熟練程度遠超於鄰接表,可能對於鍊錶的寫法不夠熟練....之後應該多回顧一下。
資料結構第六章小結
第六章主要學習圖,感覺有蠻多概念和演算法要去記住,可能會造成混淆 在學習過程中,感覺不是實打實的掌握,還得多看看書。思維導圖如下 個人小測中 1 使用鄰接矩陣a儲存無向網路,若i號頂點與j號頂點之間不存在邊,則a i j 值為多少 連通圖中 鄰接矩陣 連通為1,不連通為0,無向網路連通為權值,不連通...
第六章 資料結構
存放同一種資料型別的多個元素的容器,通過索引 記憶體偏移量 進行元素的訪問,陣列的大小一旦確定就不能改變。陣列其實也是線性表結構,在記憶體中陣列的元素是緊挨著連續儲存的。特點 查詢快 增刪慢 舉例 定義乙個陣列 int arr new int 想在2的後面插入乙個新的元素11,這時候就需要定義乙個新...
第六章學習小結
第六章主要進行有關圖的學習,這一章學得東西很多,涉及圖的方方面面包括如何定義儲存結構,如何初始化,如何建立一張圖,如何進行圖的操作等等。6 1主要學習了圖的基本知識,不帶權圖包括有向圖,無向圖,帶權圖包括有向網路,無向網路。在求度的時候要注意無向圖和有向圖的區別,有向圖包括入度和出度。連通分量 最大...