1、邻接矩阵(稠密图
#define maxvertexnum 100;
typedef struct{
char ver[maxvertexnum];//顶点表
int edge[maxvertexnum][maxvertexnum];//边表
int arcnum,vernum;//图当前的边数和顶点数
}Mgraph;
2、邻接表(稀疏图)(顺序存储加链式存储)
//顶点
typedef struct Vnode{
Vnode *firstarc;//指向第一个顶点的位置
VertexType data;//当前顶点的数据值
}AdjList[maxvertexnum];
//弧
typedef struct Arcnode{
Vnode *nextarc;//指向下一个由当前顶点指向的节结点
InfoType weigh;//边的权值
int adjvex;//该结点在数组中位置
};
//邻接表
typedef struct{
AdjList adj;//顶点表
int arcnum,vertexnum;//边数和顶点数
Graphkind kind;//图的种类
}AlGraph;
3、十字链表(有向图)
#defind max//最多的顶点数
typedef enum{dg,udg,dn,udn}Graphkind ;//图的种类
/*dg-有向图;udg-无向图;dn-有向网;udn-无向网*/
//顶点结构
typedef struct Vnode{
vertextype data;//顶点的数据域
Vnode *firstin;//指向当前结点的第一个结点的位置
Vnode *firstout;//由当前结点支出的第一个结点的位置
}Vnode;
//边表结构
typedef struc Arcnode{
int headvex,tailvex;//弧线的弧头和弧尾顶点在顶点数组中的下标位置
Vnode *hlink,*tlink;//分别指向下一个同一个弧头或弧尾顶点的弧结点
int info;//权值
}
//十字链表结构
typedef struct{
Vnode[max];//顶点表
int vertexnum,arcnum;//顶点个数和弧的个数
}OrthList;
4、邻接多重表(无向图的链式存储)
#define max;//顶点数的最大值
typedef struct{
VertexType data;//数据
Vnode *first;//该顶点依附的第一条边
}Vnode;
typedef struct{
int ivex,jvex;//该边的两边的顶点位置
Vnode *ilink,*jlink;//分别指向下一个依附于同一个顶点的边结点
}endgenode;
typedef struct{
Vnode vertex[num];//顶点表
int vexnum,edgenum;//顶点和边的个数
}AdjMultiList;