在邻接矩阵的存储结构中,当边比较少的时候,这种结构很浪费存储空间,因此我们考虑用链表来代替二维矩阵存储边的信息,顶点信息还是用一维数组表示。
此时,我们的顶点信息不只是自己的名称等,还要指向自己的第一个边。边表结点包括三个部分,邻接点域存放下标,权值域,存放指向改点的边的权值,链域,指向下一个结点。
typedef char VertexType;
typedef int EdgeType;
typedef struct EdgeNode //边表结点
{
int adjvex; //该顶点下标
EdgeType weight; //存储权值
struct EdgeNode *next; //指向下一个邻接点
}EdgeNode;
typedef struct VertexNode //顶点表结点
{
VertexType data; //顶点域,存储顶点信息
EdgeNode *firstedge; //指向第一条边
}VertexNode,Adjlist[MAXVEX];
typedef struct //图的结构体
{
Adjlist adjlist;
int numVertexs,numEdges;
}GraphAdjlist;