Before
图(Graph)已不同于线性表和树了。它是一种更为复杂的数据结构。在线性表中,数据元素之间仅有线性关系,每个数据元素只有一个直接前驱和一个直接后继;在树形结构中,数据元素之间有着明显的层次关系,并且每一层上的结点可能和下一层中多个结点相关,但只能和上一层中一个结点相关;而在图形结构中,结点之间的关系可以是任意的,图中任意两个数据元素之间都可能有相关的联系。
About:图
在图中,数据元素通常被称为顶点(Vertex),同时,我们将图划分为有向图(Digraph)和无向图(Unidigraph)两大类。在有向图中,两顶点的关系我们用箭头表示,这个箭头我们称之为弧(Arc),箭头尾部连接顶点称为弧尾(Tail)或初始点(Initial node),箭头头部连接顶点称为弧头(Head)或终端结点(Terminal node)。 在无向图中,我们则用一条边(Edge)替代箭头的表示。有向和无向的区别即两顶点之间是单向通道还是双向通道。
若我们用n表示一个图中的顶点数目,e表示边或弧的数目。则在无向图中e的取值范围为0到1/2 n(n-1)。当e等于1/2 n(n-1)时,我们称该无向图为完全图。而在有向图中,其e值的范围为0到n(n-1),而具有n(n-1)条弧的有向图,我们称为有向完全图。至于稀疏图或稠密图即完全指弧或边的或多或少了,指标为n㏒n。
有时呢,图的边或弧会具有与它相关的数(大小依实际情况而定),这种与图的边或弧相关的数叫做权(Weight)。这种带权的图通常称为网(Network)。
有向图
对于有向图而言,其弧是有方向性的。描述时,一般是指自某个顶点到某个顶点。而从顶点指出去弧的数目称为该顶点的出度(OutDegree),指进来弧的数目称为该顶点的入度(InDegree)。对于一个顶点而言,它的度(Degree)就等于入度与出度的和。有时呢,我们也称从一个顶点到另一个顶点的弧集为路径,若在一个有向图中,任意两个顶点都有路径可达,则我们称这个有向图为强连通图。在有向图中极大强连通子图称做有向图的强连通分量。(子图应该是好理解的)
无向图
而对于无向图,我们称一条边两端的顶点为领接点(Adjacent),即表示两顶点相邻接。也可以说这条边依附(Incident)于这两个邻接点上,或这条边和两个个邻接点相关联。在无向图中,一个顶点的度是其相关联边的数目之和。同理,若任意两个顶点都有路径可达,说明这两个顶点是连通的,称这个无向图为连通图,而其极大连通子图则称之为该图的连通分量。
初始化
由于图的结构较复杂,其任意两个顶点之间都可能存在关系,或无。因此无法直接以数据元素所在存储区的物理位置来表示各元素之间的位置,即图没有顺序映象的存储结构,但我们可借助邻接矩阵的形式间接将其表示。另一方面,在用多重链表表示图时,因各顶点的度数不相同,所以难以调整指针域的大小。因此应根据具体的图和需要进行的操作,设计恰当的结点结构和表结构,这里常用的是邻接表。