数据结构:第6章学习小结
一、学习内容
1.第六章主要学习内容为图,相对于之前其他的数据结构,图显得比较复杂,考虑问题需要考虑有向图,无向图
2.本章学习了两个存储图的算法:邻接矩阵,邻接表;邻接矩阵适合稠密图,邻接表适合稀疏图
邻接矩阵 const int MVNum = 100;//最大顶点数 typedef srruct{ char vexs[MVNum];//顶点表 int arcs[MVNum][MVNum];//邻接矩阵 int vexnum,arcnum;//图的当前点数和边数 }AMGraph
邻接表 typedef MVNum = 100; typedef struct ArcNode{ int adjvex;//该边所指向的顶点的位置 struct ArcNode *nextarc;//指向下一条边的指针 OtherInfo info;//和边相关的信息,如权值; }ArcNode; typedef struct{ char data;//顶点信息 ArcNode *firstarc;//指向第一条依附该顶点的弧 }VNode,AdjList[MVNUM]; typedef struct{ AdjList Vertices;//邻接表 int vexnum,arcnum;//定点数和边数 }
3.图的遍历主要有两种:广度优先遍历(BFS)和深度优先遍历(DFS)
广度优先遍历会优先遍历当前结点附近所以结点,可以说是像声波扩散一样;
深度优先搜索会在当前结点往下一个结点走到最后一个结点;
4.最小生成树
1.Prim算法,以顶点为考虑条件,选择时prim算法会筛选顶点不围成连通图,更适用于稠密图;
2.Kruskal算法:以边为考虑条件,选择边的最小权值,也会筛选不形成连通图,适用于稀疏图;
所生成的最小树并不是唯一的,当存在权值一样得到边时,就会导致出现不一样的最小数。
二、学习心得
本章图是一个新的数据结构,我的掌握程度不够好,只能理解所学算法的运行过程,自己很难去复现代码,就接下来的时间要多写代码,尽量能够做到自行复现;
PTA上的题目也没能够很好掌握,需要找到解题的好方法,开阔思维