图的存储
1.邻接矩阵
typedef struct{ char Vex[N];//顶点表 int Edge[N][N];//邻接矩阵,边表 int vexnum, arcnum;//图的当前顶点数和弧数 }MGraph;
2.邻接表
typedef struct ArcNode{//边表结点 int adjvec;//该弧所指向顶点的位置 struct ArcNode *next;//指向下一条弧的指针 //int info;//网的边权值 }ArcNode; typedef struct VNode{//顶点表结点 char data;//顶点信息 ArcNode *first;//指向第一条依附该顶点的弧的指针 }VNode, AdjList[N]; typedef struct{ AdjList vertices;//邻接表 int vexnum, arcnum;//图的顶点数和弧数 }ALGraph;//邻接表存储的图类型 //确定顶点位置 int LocateVex(ALGraph *G, char v){ for(int i = 0; i < (G->vexnum); i++){ if(G->vertices[i].data == v) return i; } }
3.十字链表(有向图)
typedef struct ArcNode{ int tailvex, headvex; struct ArcNode *hlink, *tlink; //InfoType info; }ArcNode; typedef struct VNode{ char data; ArcNode *fisrtin, *firstout; }VNode; typedef struct VNode{ VNode xlist[N]; int vexnum, arcnum; }GLGraph;
4.邻接多重表(无向图)
typedef struct ArcNode{ bool mark; int ivex, jvex; struct ArcNode *ilink, *jlink; //InfoType info; }ArcNode; typedef struct VNode{ char data; ArcNode *firstedge; }VNode; typedef struct{ VNode adjmulist[N]; int vexnum, arcnum; }AMLGraph;