图的存储结构
图是顶点和边的集合。顶点可以采用线性表存储,边的存储问题其实就是矩阵的存储问题。
我们常用的图的存储方法有邻接矩阵和邻接表两种,十字链表存储也是可以的。这个主要介绍前面两种。
1、邻接矩阵
在邻接矩阵存储方法中,图的顶点是保存在一个一维数组中,图的边是保存在一个二维数组之中。结构体定义如下
typedef struct { SeqList vertices; //顺序表存放顶点 int edge[MaxVertices][MaxVertices]; //二位数组存放边(邻接矩阵存放边) int numsOfEdge; //边的条数 }AdjMGraph; //图的结构体定义
我们假设顶点到自身的权值为0,顶点A B之间如果不存在边,权值为∞,则下图表示了使用邻接矩阵存储的图结构。

2、邻接表
对于顶点较少,边较多的图来说,邻接矩阵存储结构效率较高,但是对于顶点较多,边较少的图,邻接矩阵存储结构就会浪费较多的空间。
对于顶点较多,边较少的图我们采用邻接表进行存储。数据结构定义如下所示。
typedef struct Node { int dest; //邻接边的弧头顶点序号 int weight; //权值 struct Node *next; //单链表的下一个结点指针 }Edge; typedef struct { DataType data; //顶点数据元素 int source; //邻接边的弧尾顶点序号 Edge *adj; //邻接边的头指针 }AdjLHeight; //数组的数据元素类型结构体 typedef struct { AdjLHeight a[MaxVertices]; //邻接表数组 int numOfVerts; //顶点个数 int numOfEdge; //边个数 }AdjLGraph; //邻接表结构

浙公网安备 33010602011771号