存储结构:
1、邻接矩阵存储
typedef struct
{
char vex[MAXVEX];//顶点数
int arc[MAXVEX][MAXVEX];//邻接矩阵
int numVextexes,numEdges;//顶点数和边数
}MGraph;
边数相对节点较少时会浪费内存,因此可以使用链表实现
2、邻接表
此为边表
typedef struct EdgeNode
{
int adjvex;//存储顶点对应的下标
int weight;
struct EdgeNode* next;//指向下一个邻接点
}EdgeNode;
此为顶点表
typedef struct VertexNode
{
int data;//存储顶点信息
EdgeNode *firstedge;//指向第一个以该顶点为顶点的弧结点
}VertexNode[MAXVEX];
此为图表
typedef struct
{
VertexNode adjList;//顶点表节点
int numVertex,numEdges;//顶点数和边数
}GraphAdjList;
邻接链表和逆邻接链表可以分别解决出度和入度的问题,但是不能同时考虑,因此引入十字链表。
3、十字链表 (有向图)
顶点表结构为: data firstin firstout
边表结构为:tailvex headvex hlink tlink info
firstin,firstout:分别指向以该节点为弧头和弧尾的弧结点
tailvex:弧尾 headvex:弧头 hlink:指向弧头相同的下一条边 tlink:指向弧尾相同的下一条边
首先将顶点结点和所有的弧结点全部写出,然后分别将指针指向相应的弧。
注意,此处所有的指针都是指向弧的,与之前的相同。