版权声明:本文为博主原创文章,若有错误之处望大家批评指正!转载需附上原文链接,谢谢! https://blog.csdn.net/summer_dew/article/details/82954174
有向图的存储结构
图的存储结构类型
邻接矩阵
有向图、无向图均可
//简单版
char vertex[5] = {'A','B','C','D','E'}; //顶点信息
float Edge[5][5]; //边
for (int i=0; i<5; ++i)
for (int j=0; j<5; ++j)
Edge[i][j] = MAX;
// 严书
typedef struct ArcCell { // 弧的定义
VRType adj; // VRType是顶点关系类型
// 对无权图,用1或0表示相邻否;
// 对带权图,则为权值类型。
InfoType *info; // 该弧相关信息的指针
} ArcCell, AdjMatrix[MAX_VERTEX_NUM][MAX_VERTEX_NUM];
typedef struct { // 图的定义
VertexType vexs[MAX_VERTEX_NUM]; // 顶点信息
AdjMatrix arcs; // 弧的信息
int vexnum, arcnum; // 顶点数,弧数
GraphKind kind; // 图的种类标志
} MGraph;
邻接表
有向图、无向图均可
typedef struct ArcNode{
int adjV; //这条边所指的顶点
struct ArcNode *next; //指向下一个边
}ArcNode; //边
typedef struct{
int data; // 顶点信息
ArcNode* first; // 指向第一条依附该顶点的弧
}VNode,AdjList[MAX_VERTEX_NUM]; //顶点
typedef struct{
AdjList vertices;
int vexnum, arcnum;
int kind; //图的种类
}ALGraph; //图
有向图的邻接表
无向图的邻接表
有向图的十字链表
//边 start->end
typedef struct ArcBox {
int headvex; //弧的头
int tailvex; //弧的尾
struct ArcBox *hlink; //headvex的下一条出边
struct ArcBox *tlink; //tlink下一条入边
}ArcNode; //弧的结构表示
typedef struct VexNode {
VertexType data;
ArcBox *firstin; //第一个入边
ArcBox *firstout; //第一个出边
}VexNode; // 顶点的结构表示
typedef struct {
VexNode xlist[MAX_VERTEX_NUM]; // 顶点结点
int vexnum; //当前顶点树
int arcnum; //弧数
}OLGraph; //有向图十字链表
无向图的邻接多重表
//边i-j
typedef struct EBox { //
VisitIf mark; // 访问标记
InfoType *info; //信息指针
int ivex; //i结点
struct EBox* inext; //i结点的下一条边
int jvex; //j结点
struct EBox* jnext; //j结点的下一条边
}EBox;
//顶点
typedef struct VexBox {
VertexType data;
EBox *first; //该结点的第一条边
}VexBox;
//邻接多重表
typedef struct {
VexBox adjmulist[MAX_VERTEX_NUM];
int vexnum, edgenum; //顶点数、边树
} AMLGraph;