数据结构(五)之图的存储方式

  • 邻接表

#define MAX 20
typedef struct ArcNode{
	int adjvex;//该弧指向的顶点的位置
	struct ArcNode *nextarc;//指向下一条弧的指针 
	int *info; //该弧相关信息的指针 
}ArcNode;
typedef struct VNode{
	int data;
	ArcNode *firstarc;//指向第一条依附该顶点的弧的指针 
}VNode,AdjList[MAX];
typedef struct{
	AdjList vertices;
	int vexnum,arcnum;//顶点数和边数
	int kind;//图的种类标志 
}ALGraph;//邻接表

  • 多重邻接表

#define MAX 20
typedef emnu{unvisited,visited} VisitIf;
typedef struct EBox{
	VisitIf mark;  //访问标记
	int   ivex,jvex;  //该边依附的两个顶点的位置
	struct EBox *ilink,*jlink;//分别指向依附这两个顶点的下一条边
	int *info;        //该边的信息指针 
}EBox;
typedef struct VexBox{
	int data;
	EBox *firstedge;
}VexBox;
typedef struct{
	VexBox adjmulist[MAX];
	int vexnum,edgenum;//顶点数和边数 
}AMLGraph; //多重邻接表

  • 十字邻接表

#define MAX 20
typedef struct ArcBox{
	int tailvex,headvex; //弧的尾顶点和头顶点的位置 
	struct ArcBox *hlink,*tlink;
	int *info; //该弧相关信息的指针 
}ArcBox;
typedef struct VexNode{
	int data;
	ArcBox *firstin,*firstout;//分别指向第一条入弧和出弧 
}VexNode;
typedef struct{
	VexNode xlist[MAX];
	int vexnum,arcnum;//顶点数和弧数 
}OLGraph;//十字邻接表

猜你喜欢

转载自blog.csdn.net/m0_37650503/article/details/84436008