图的存储表示:1.邻接矩阵,2.邻接表,3.有向图的十字链表,4.无向图的邻接多重表
1.邻接矩阵
#define FINITY 5000
#define m 20
typedef char vertextype;
typedef int edgetype;
typedef struct{
vertextype vexs[m];
edgetype edges[m][m];
int n,e;
}mgraph;
2.邻接表
#define m 20
typedef char datatype;
typedef struct node{
int adjvex;
struct node *next;
}edgenode;
typedef struct vnode{
datatype vertex;
edgenode *firstedge;
}vertexnode;
typedef struct{
vertexnode adjlist[m];
int n,e;
}adjgraph;
3.无向图的邻接多重表
#define m 20
typedef char vertextype;
struct edge{
BOOL mark;
int vertexi;
int vertexj;
struct edge *linki;
struct edge *linkj;
};
typedef struct vnode{
vertextype vertex;
struct edge *firstedge;
}*graph;
struct node head[m];
4.有向图的十字链表
#define m 20
typedef char vertextype;
typedef struct ArcBox{
int tailvex,headvex;
struct ArcBox *tlink,*hlink;
}ArcBox;
typedef struct VexNode{
vertextype data;
ArcBox *firstin,*firstout;
}VexNode;
typedef struct{
vexnode xlist[m];
int vexnum,arcnum;
}Graph;