图的两种表示方法及它的初始化与创建
图的表示
图的两种表示方法:邻接矩阵和邻接表。
优缺点:
邻接矩阵
优点:表示方便,容易理解,可以方便的求出顶点的出入度。
缺点:当为稀疏图的时候,大量空间储存的是无效数据。
邻接表
优点:灵活的储存空间,稀疏图的时候节省空间。
缺点:有向图中求入度不方便(但是可以借助逆邻接表解决),另外稠密图就浪费空间了(申请结点所占的空间,权值所占空间)。
代码如下:
1)邻接矩阵的表示
#define MaxVertexNum 100
#define INFINITY 65535
typedef int Vertex;
typedef int WeightType;
typedef char DataType;
typedef struct GNode *PtrToGNode;
struct GNode
{
int Nv;
int Ne;
WeightType G[MaxVertexNum][MaxVertexNum];
DataType Data[MaxVertexNum];
};
typedef PtrToGNode MGraph;
2)邻接表的表示
#define MaxVertexNum 100
#define INFINITY 65535
typedef int Vertex;
typedef int WeightType;
typedef char DataType;
typedef struct ENode* PtrToENode;
struct ENode
{
Vertex V1,V2;
WeightType Weight;
};
typedef PtrToENode Edge;
typedef struct AdjVNode PtrToAdjVNode;
struct AdjVNode
{
Vertex AdjV;
WeightType Weight;
PtrToAdjVNode Next;
};
typedef struct AdjVNode
{
PtrToAdjVNode fristEdge;
DataType Data;
}AdjList[MaxVertexNum];
typedef struct GNode * PtrToGNode;
struct GNode
{
int Nv;
int Ne;
AdjList G;
}