六、图
图的概念
- 图是一种较线性表和树更为复杂的数据结构,在图形结构中,结点之间关系可以是任意的,图中任意两个数据元素之间都可能相关。
- 有向图和无向图
- 若无向图中的每两个顶点之间都存在着一条边,则称该无向图称作完全无向图;显然完全无向图中包含着e=n(n-1)/2条边。若有无向图中的每两个顶点之间都存在方向相反的两条边,则称该有向图称作完全有向图;显然完全有向图中包含有e=n(n-1)条边。
- 与图的边或弧相关的数叫做权,带权的图称为网。
- 对于有向图而言,度又分为出度和入度。顶点的出度——以顶点v为弧尾的弧的数目;顶点的入度——以顶点v为弧头的弧的数目;顶点的度为该顶点的出度和入度的和。
- 在无向图G中,如果从顶点v到顶点w存在路径,则称v到w是连通的。若图G中任意两个顶点之间都有路径相通,则称为连通图。
- 若无向图为非连通图,则图中各个极大连通子图称作此图的连通分量。任何连通图的连通分量只有一个,即本身,而非连通图则有多个连通分量。
- 在有向图中,若任意两个顶点之间都存在一条有向路径,则称此有向图为强连通图。
- 若有向图为非强连通图,其各个强连通子图称为它的强连通分量。
图的存储结构——邻接矩阵
- 邻接矩阵是表示顶点之间相邻关系的矩阵。
- 无向图的邻接矩阵:
- 有向图的邻接矩阵:
- 网的邻接矩阵:
图的存储结构——邻接表
- 邻接表存储方法是一种顺序分配与链式分配相结合的存储方法。它包括两部分:一部分是单链表,用来存放边的信息;另一部分是数组,主要用来存放顶点本身的数据信息。
- 无向图邻接表:
- 有向图的邻接表:
图的存储结构——十字链表
- 十字链表是有向图的另一种链式存储结构。可以看成是将有向图的邻接表和逆邻接表结合起来得到的一种链表。在十字链表中,每条弧和每个顶点分别对应着一个结点。