数据结构数据存储表示---图
-------------图表示-------------
1)、图的数组(邻接矩阵)存储表示
#define INFINITY INT_MAX //最大值
#define MAX_VERIEX 20 //最大顶点个数
typedef enum{DG,DN,AG,AN} GraphKind //有向图,有向网,无向图,无向网
typedef struct AreCell {
VRType adj; //表示顶点关系类型,对无全图,用0或1,表示相邻否,对带权图,则为权值类型,
InfoType *info; //与该狐相关的指针信息
}ArcCell,AdjMatrix[MAX_VERIEX][MAX_VERIEX];
typedef struct {
VertexType vexs[MAX_VERIEX]; //顶点向量
AdjMatrix arcs; //邻接矩阵
int vexnum,arcnum; //图的当前顶点数和弧数
GraphKind kind; //图的种类标志
}MGraph;
------------图的邻接表存储表示--------------------
#define MAX_VERTEX_NUM 20
typedef struct ArcNode{
int adjvex; //该弧所指向的顶点的位置
struct ArcNode *nextarc; //指向下一条弧的指针
InfoType *info;
}ArcNode;
typedef struct VNode{
VertexType data; //顶点信息
ArcNode *fristarc; //指向第一条依附该顶点弧指针
}VNode,AdjList[MAX_VERTEX_NUM];
typedef struct{
AdjList vertices;
int vexnum,arcnum; //图的当前顶点数和弧数
int kind; //图的种类标志
}ALGraph;
----------------有向图的十字链表存储表示--------------
#define MAX_VERTEX_NUM 20
typedef struct ArcBox{
int taiivex,handvex; //该弧的尾和头顶点数目
struct ArcBox *hlink,*tlink; //分别为弧头和弧尾相同的链域
InfoType *info;
}ArcBox;
typedef struct VexNode{
VertexType data;
ArcBox *firstin,*firstout; //分别指向顶点第一条入弧和出弧
}VexNode;
typedef struct {
VexNode xlist[MAX_VERTEX_NUM]; //表头向量
int vexnum,arcnum; //有向图的当前顶点数和弧数
}
----------------无向图的邻接多重表存储表示----------------
#define MAX_VERTEX_NUM 20
typedef enum{unvisited,visited}ViditIf;
typedef struct EBox{
VisitIf mark; //访问标记
int ivex,jvex; //改变依附的两个顶点位置
struct EBox *ilink,*jlink; //分别指向依附这两个顶点的下一条
InfoType *info;
}EBox;
typedef struct VexBox{
VextexType data;
EBox *fristedge; //指向第一条依附该顶点的边
}VexBox;
typedef struct{
VexBox adjmulist[MAX_VERTEX_NUM];
int vexnum,edgenum; //无向图的顶点数和边数;
}AMLGraph;