图的邻接矩阵表示法
#define MaxInt 32767 //表示极大值,表示两个顶点之间没有连线
#define MVNum 100 //最大顶点数
typedef char VerTexType;
typedef int ArcType;
typedef struct
{
VerTexType vexs[MVNum]; //顶点表
ArcType arcs[MVNum][MVNum]; //邻接矩阵
int vexnum, arcnum; //图的当前点数和边数
}AMGraph; //Adjacency Matrix
图的邻接表表示法
//边结点
/*
adjvex info *nextarc
*/
typedef struct ArcNode
{
int adjvex; //该边所指向的顶点位置
struct ArcNode *nextarc;
OtherInfo info; //一般是边的权值
}ArcNode;
//顶点数组
/*
data *firstarc
*/
typedef struct VNode
{
VerTexType data;
ArcNode *firstarc;
}VNode, AdjList[MVNum]; //结构数组
typedef struct
{
AdjList vertices;
int vexnum, arcnum;
}ALGraph; //Adjacency List
有向图的十字链表存储表示
//有向图的另一种链式存储结构
//便于求顶点的入度和出度
#define MAX_VERTEX_NUM 20
//弧结点
/*
tailvex headvex hlink tlink info
*/
typedef struct ArcBox
{
int tailvex, headvex; //弧的头和尾顶点的位置
struct ArcBox *hlink,*tlink; //弧头相同的和弧尾相同的链域
Otherinfo info;
}ArcBox;
//顶点结点
/*
data *firstin *firstout
*/
typedef struct VexNode
{
VerTexType data;
ArcBox *firstin, *firstout; //指向以该顶点为弧头的和弧尾的弧
}VexNode;
typedef struct
{
VexNode xlist[MAX_VERTEX_NUM];
int vexnum, arcnum;
}OLGraph; //Othorgonal List
/*
弧结点的两个指针都由头插法插入,正好对应顶点结点的两个指针
*/
无向图的邻接多重表存储表示
#define MAX_VERTEX_NUM 20
typedef enum{unvisited, visited} VisitIf;
//边结点
/*
mark ivex ilink jvex jink info
*/
typedef struct EBox
{
VisitIf mark;
int ivex, jvex; //边依附的两个顶点的位置
struct EBox *ilink, *jlink; //分别指向依附这两个顶点的下一条边
InfoType *info;
}Ebox;
//顶点结点
/*
data firstedge
*/
typedef struct VexBox
{
VerTexType data;
EBox *firstedge;
}VexBox;
typedef struct
{
VexBox adjmulist[MAX_VERTEX_NUM];
int vexnum, edgenum;
}AMLGraph; //Adjacency Multilist