图(2)——图的存储结构

一般来说,图的存储结构应根据具体问题的要求来设计。常用的存储结构有邻接矩阵,邻接表,邻接多重表和十字链表。
1、邻接矩阵

在图的邻接矩阵表示中,除了记录每个顶点信息的顶点表外,还有一个表示各个顶点之间关系的矩阵,称为邻接矩阵。
如上图分别给出了无向图、有向图和有向网的邻接矩阵

w无向图的邻接矩阵是对称的,
w有向图的邻接矩阵可能是不对称的。
w在无向图中, 统计第i 行(列)1的个数可得结点i 的度。
w在有向图中, 统计第i 行1的个数可得结点i的出度,统计第j 列1的个数可得结点j 的入度。
w属于静态存储方法。不易扩充。

w与结点个数有关,与边(弧)无关。会出现稀疏矩阵。

2、邻接表
邻接表是邻接矩阵的改进。当图中的边数很少时,邻接矩阵会出现大量的零元素,为了存储这些零元素,将耗费大量的存储空间,为此,可以把邻接矩阵的每一行改为一个单链表。

如图分别给出了无向图和有向图的邻接表表示。其中,在有向图的邻接表表示中,统计顶点的弧链表中弧结点的个数,得到的是该节点的出度,要想的得到其入度,可做出其逆邻接表,如下图所示:

对于带权图,必须在邻接表的边结点中增加一个存放边上权值的域,如下图所示:


n结点的度:

      无向图:为该结点的单链表中结点数目。
      有向图:出度:为该结点的单链表中结点数目。
                   入度:扫描整个邻接表的单链表,为该结点出现的次数或者扫描逆邻接表。

3、邻接多重表
在无向图的邻接表中,每条边都被存储了两次,为了简化,得到邻接多重表。在无向图的邻接多重表中,有两个顶点域adjvex1和adjvex2,分别表示该边所依附的两个顶点在图中的序号nextarc1域是链接指针,指向下一条依附于顶点adjvex1的边,nextarc2指向下一条依附于顶点adjvex2的边
4、十字链表

同无向图类似,有向图也有另一种链式存储结构,称为十字链表。根据需要,对于有向图,有时既要用到邻接表,又要用到逆邻接表,可以把这两个表合二为一,用十字链表表示

猜你喜欢

转载自blog.csdn.net/betty__/article/details/80038340