数据结构学习提纲
(最终解释权归原作者所有,侵权必究)
图
1、【概念】图的定义及基本术语
⑴ 图是由顶点的有穷非空集合和顶点之间边的集合组成,通常表示为:G=(V,E),G表示一个图,V是图G中的顶点的集合,E是图G中顶点之间边的集合。在图中,顶点个数不能为0,但可以没有边。
⑵ 结点:图中的顶点。结点间的关系:图中的连线。无向图:图中两个顶点的连线是不带方向的边,边(v,m)表示v与w互为邻接点,或说边(v,w)依附于顶点v,w,或称边(v,w)和顶点v,w相关联。v的度:和v相关联的边的数目。有向图:图中两个顶点的连线是带方向的边(称为弧),弧可以赋予有意义的值,称为权。对于弧<v,w>,称v为弧尾,w为弧头;即顶点v邻接到顶点w,或称顶点w邻接自顶点v;或称弧<v,w>和顶点v,w相关联。v的入度:以v为弧头的弧的数目。v的出度:以v为弧尾的弧的数目。v的度:v的入度与出度之和。路径:在无向图G=(V,E)中,从顶点vp到顶点vq之间的路径是一个顶点序列(vp=vi0,vi1,vi2,…,vim=vq),其中,(vij-1,vij)∈E(1≤j≤m)。若G是有向图,则路径也是有方向的,顶点序列满足< vij-1,vij >∈E。路径长度:如果是无向图,路径上边的数目是路径长度;如果是有向图,弧上有权,路径长度为路径上的权值之和,弧上无权,路径上弧的数目是路径长度。简单路径:指路径序列中顶点不重复出现的路径。简单回路:指路径序列中的第一个顶点和最后一个顶点相同的路径,而其他顶点都不相同。子图:若图G=(V,E),G’=(V’,E’),如果V’包含于V,且E’包含于E,则称图G’是G的子图。
2、【概念】图的分类
⑴ 根据边的方向性、边上是否有权:有向图、无向图、有向网、无向网。
⑵ 根据边(弧)数e和顶点数n之间的关系可分为:无向完全图:对具有n个顶点的图,任意两个顶点vi和顶点vj都存在边(vi,vj),边数e=n(n-1)/2。有向完全图:对具有n个顶点的图,任意两个顶点vi和顶点vj,存在弧<vi,vj>,即边(vi,vj)和边(vj,vi)都存在,弧数e=n(n-1)。稀疏图:边(弧)数e≤nlogn。稠密图:边(弧)数e>nlogn。
3、【概念】图的连通性
⑴ 无向图的连通性
连通性:若从顶点vi和顶点vj有路径,则称vi和vj是连通的。
连通图:图上任意两点都是连通的。
连通分量:极大连通子图。含有极大顶点数(如果多加1个顶点,子图就不连通了)和依附于这些顶点的所有边。
⑵ 有向图的连通性
强连通性:若从顶点vi到顶点vj有路径,从顶点vj到顶点vi也存在路径,则称vi和vj是强连通的。
强连通图:图上任意两个顶点都是强连通的。
强连通分量:极大强连通子图。
⑶ 生成树和生成森林
生成树:极小连通子图,包含图中的全部顶点和连接全部顶点的n-1条边。如果多一条边,就会出现回路。如果减少一条边,则必然成为非连通的,生成树不一定唯一。
生成森林:不连通的图中存在若干个连通分量,每个连通分量对应一棵生成树,这些连通分量的生成树就组成了一个非连通图的生成森林。
4、【概念】图的邻接矩阵存储类型
⑴用一个一维数组存储图中顶点的信息,用一个二维数组(称为邻接矩阵)存储图中各顶点之间的邻接关系,用两个整型变量存储图中的顶点数和边(弧)数。
⑵图的邻接矩阵定义:
typedef struct {VertexType vexs[Vnum];int arcs[Vnum][ Vnum]; int vexNum,arcNum;}MGraph;
网的邻接矩阵定义:
typedef struct{VertexType vexs[Vnum];WeightType arcs[Vnum][Vnum];intvexNum,arcNum; };
⑶邻接矩阵的特点:是一种顺序存储结构;二维数组arcs中的元素值描述了边的邻接关系及边上是否有权;无向图和无向网的邻接矩阵是对称矩阵,有向图和有向网的邻接矩阵不一定是对称矩阵;对于边(弧)个数较少的稀疏图,其邻接矩阵也稀疏,有较多的0,用二维数组存储邻接矩阵时存储空间利用率低。
⑷适合计算顶点的度,求一个点的所有邻接点,插入或删除一条边(弧)。不太适合顶点的插入和删除,图的遍历等。、
5、【概念】图的邻接表表示
⑴对图中每个顶点建立一个与该顶点有邻接关系的顶点单链表;用一个一维结构体数组存储顶点的值和各顶点单链表的头指针;用整型变量存储图中的顶点数和边(弧)数。
⑵邻接表便于求顶点的出度,不便于求顶点的入度,如果实际问题需要求顶点的入度,可以采用逆邻接表。
⑶typedef struct ArcNode{int adjvex;//弧指向的顶点的位置s