前言
数据结构图型(Graph)结构
一、图型(Graph)结构:
什么是图型结构:由有穷且非空的顶点和顶点之间的边组成的集合
通常表示:G(V,E)G表示一个图,V是图中顶点(元素)集合,E是图中边(元素之间的关系)的集合
无向图:
边用(A,B)方式表示,点与点之间是互通的
在无向图中,任意两个顶点之间都有边,该图称为无向完全图,则含有n个顶点的无向完全图有 n*2(n-1)/2 条边
有向图:
边用 <A,B> 方式,仅表示从A点到B点有边,有向图中边也叫弧,A是弧尾,B是弧头
在有向图中,任意两个顶点之间都有方向相反的两个弧,这种图称为有向完全图,则含有n个顶点的有向完全图有 n*2(n-1) 条边
注意:不讨论顶点到自身的边,而且也不讨论重复出现的边,这种图叫做简单图,数据结构只研究简单图
点多边少的图叫做稀疏图,反之叫做稠密图,图中顶点到顶点之间的边如果带上数据,这些数据叫做边的权重,带权重的图称为带权图,也叫网
依附于顶点的边的数量称为该顶点的度,有向图中度又分为出度(从该顶点出发的弧的数量)、入度(指向该顶点的弧的数量)
路径:从顶点到另一个顶点经过的边叫做路径,边的数量叫做该路径的长度
环:图中有某个顶点最后能通过边绕回到该点
回路:专指有向图,从某点出发,最终又有弧能够回到该点,如果某点只有输出、没有输入时,该点一定没有回路
注意:顶点序列中不重复出现的路径称为简单路径
如果顶点V到顶点V1之间有路径,则称V和V1时连通的,如果图中任意两个顶点之间时连通的,称为连通图,如果一个图中有n个顶点,那么需要n-1条边才能够达到连通图,如果仅需要n-1条边的连通图也叫做生成树,如果再配上权重,代价最小的叫做最小生成树
图的存储结构:
邻接矩阵:用一个一维数组来存储n个顶点,用一个二维数组存储顶点之间的边
char V[]={A,B,C,D,E,F};
A B C D E F
A [0][1][1][0][0][0]
B [1][0][0][1][0][0]
C [1][0][0][1][0][1]
D [0][1][1][0][1][1]
E [0][0][0][1][0][0]
F [0][0][1][1][0][0]
二维数组中E[i][j]的值为1,则表示顶点V[i],到顶点V[j]有边
注意:由于不存在自己到自己的边,左对角线上的值都是假
如果存储的是无向图,则二维数组的值会沿左对角线对称,所以,如果不对称,则存储的一定不是无向图
邻接矩阵的优点:方便计算顶点的入度和出度
缺点:如果图是稀疏图,会非常浪费存储空间
图的遍历:
图的深度优先遍历:类似于树的前、中、后序遍历
图的广度优先遍历:类似于树的层序遍历
二、邻接表
边:
顶点下标
下一条边的地址
顶点:
数据
指向第一条边的地址
图:
由顶点组成的数据
顶点数量
优点:节约存储空间
缺点:计算入度麻烦
十字链表:
专门用于存储有向图的一种方式
边:
弧尾下标
弧头下标
指向相同弧尾的下一条边
指向相同弧头的下一条表
顶点:
数据
指向第一条出度的边
指向第一条入度的边
图:
由顶点组成的数组
顶点数量
优点:节约空间、方便查找出入度
邻接多重表:
专门用于存储无向图的一种结构
边:
i j两个相互依附于该边的顶点下标
inext 指向下一条依附于i顶点的边
jnext 指向下一条依附于j的顶点的边
顶点:
数据
指向与顶点有关的一条边
图:
由顶点组成的数组
顶点数据
总结
以上,有错误,还请指正