在线性表中,数据元素之间是被串起来的,仅有线性关系,每个数据元素只有一个直接前驱和一个直接后继。在树形结构中,数据元素之间有着明显的层次关系,并且每一层上的数据元素可能和下一层中多个元素相关,但只能和上一层中一个元素相关。这和一对父母可以有多个孩子,但每个孩子却只能有一对父母是一个道理。可现实中,人与人之间关系就非常复杂,比如我认识的朋友,可能他们之间也互相认识,这就不是简单的一对一、一对多,研究人际关系很自然会考虑多对多的情况。那就是我们今天要研究的主题——图。图是一种较线性表和树更加复杂的数据结构。在图形结构中,结点之间的关系可以是任意的,图中任意两个数据元素之间都可能相关。

    前面同学可能觉得树的术语好多,可来到了图,你就知道,什么才叫做真正的术语多。不过术语再多也是有规律可遁的,让我们开始“图”世界的旅程。如图7-2-1所示,先来看定义。
    image.png
    图(Graph)是由顶点的有穷非空集合和顶点之间边的集合组成。
    通常表示为:G(V,E),其中,G表示一个图,V是图G中顶点的集合,E是图G中边的集合。

    对于图的定义,我们需要明确几个注意的地方:

    • 线性表中我们把数据元素叫元素,树中将数据元素叫结点,在图中数据元素,我们则称之为顶点(Vertex)。
    • 线性表中可以没有数据元素,称为空表。树中可以没有结点,叫做空树。那么对于图呢?我记得有一个笑话说一个小朋友拿着一张空白纸给别人却说这是他画的一幅“牛吃草”的画,“那草呢?”“草被牛吃光了。”“那牛呢?”“牛吃完草就走了呀。”之所以好笑是因为我们根本不认为一张空白纸算作画的。同样,在图结构中,不允许没有 顶点。在定义中,若V是顶点的集合,则强调了顶点集合V有穷非空。
    • 线性表中,相邻的数据元素之间具有线性关系,树结构中,相邻两层的结点具有层次关系,而图中,任意两个顶点之间都可能有关系,顶点之间的逻辑关系用边来表示,边集可以是空的。