1,邻接矩阵(数组)
①邻接矩阵是指用一个二维数组存储顶点间的相邻关系。
如果是无权值的图,如果两点是相邻边则矩阵对应元素值为1,否则为0.
如果是网,则用其权值表示相邻边的元素值,否则用一个无穷数表示。(因为0,甚至负数都可以表示权值)
②用一个顺序表来存储顶点。
#define INFINITY 4294967295; //定义一个无穷大的数,这里假定是32位的最大数,即2^32-1。
#define MAX_VERTEX_NUM 20;//顶点数
typedef enum GraphType{dg,udg,dn,udn};//有向图,无向图,有向网,无向网
typedef struct AdjMWGraph
{
int Edge[MAX_VERTEX_NUM][MAX_VERTEX_NUM]; //点矩阵
int Vertices[MAX_VERTEX_NUM]; //顶点
int numE; //当前的边数
int numV; //当前的顶点数
emu GraphType g_kind;//图的类型
};
2,邻接表
用链表和数组结合起来存储节点之间的关系。
typedef struct EdgeNode//边表节点
{
int adjVex;//邻接点的位置
struct ArcNode *nextEdge;//指向下一条边的指针
//int weight;//权值,如果是网
}EdgeNode;
typedef struct vNode//顶点边的节点
{
int vertex;//顶点位置
EdgeNode *firstEdge;//顶点的第一条邻接边
}VertexNode,AdjList[MAX_VERTEX_NUM];
typedef struct
{
AdjList adjList;//邻接表
int numE; //当前的边数
int numV; //当前的顶点数
emu GraphType g_kind;//图的类型
}ALGraph;
3,十字链表
十字链表是对于有向图来说的,指的是对于每一条弧,存储其弧头和弧尾,对于每一个顶点存储其入弧和出弧。
4,邻接多重表
邻接多重表是对于无向图来说的,类似于十字链表。