1.邻接矩阵

邻接矩阵法
结点数为n的图G = (V,E)的邻接矩阵A是n×n的。
将G的顶点编号为v1,v2,,...,Vn,(数组下标)
若<vi,vj>∈E,则A[i][j]=1,否则A[i][j]=O。


1.1有向图


1.2无向图


#define MaxvertexNum 100
typedef char vertexType;
typedef int EdgeType;
typedef struct{
vertexType vex[MaxvertexNum];
EdgeType Edge [MaxvertexNum][MaxvertexNum];
int vexnum, arcnum;
}MGraph;

·邻接矩阵法的空间复杂为O(n2),适用于稠密图
·无向图的邻接矩阵为对称矩阵
·无向图中第i行(或第i列)非0元素(非正无穷)的个数为第i个顶点的度;
有向图中第i行(第列)非0元素(非正无穷)的个数为第i个顶点的出度(入度)

★A[][i]表示从顶点vi到顶点vj长度为n的路径有条数

2.邻接表法
邻接表法为每一个顶点建立一个单链表存放与它相邻的边
顶点表
采用顺序存储,每个数组元素存放顶点的数据和边表的头指针
边表(出边表)
采用链式存储,单链表中存放与一个顶点相邻的所有边,一个链表结点表示一条从该顶点到链表结点顶点的边

2.1有向图边表

2.2无向图边表

#define MaxvertexNum 100
typedef struct ArcNode{//边表顶点
int adjvex;
struct ArcNode *next;
/ / infoType info;权重
}ArcNode;
typedef struct VNode {
vertexType data; //数据
ArcNode *first;//边表头指针
}VNoode ,AdjList[MaxvertexNum];//顶点表
typedef struct{
AdjList vetices;//邻接表
int vexnum, arcnum;//顶点数/边数
}ALGraph;

邻接表更加适用于稀疏图
若G为无向图,则结点的度为该结点边表的长度
若G为有向图,则结点的出度为该结点边表的长度,计算入度则要遍历整个邻接表
邻接表不唯一,边表结点的顺序根据算法和输入的不同可能会不同


3.十字链表
十字链表有向图的一种链式存储结构

data:数据域, firstarc :指向边表的头指针

adjvex
nextarc:下一个边表的指针


firstin\firstout:出边和入边单链表的头指针
tailvex\headvex :该弧弧弧头和弧尾端点
hlink/tlink弧头/尾相同的下一个结点指针
info:权值

#define MaxvertexNum 100
typedef struct ArcNode {
int tailvex, headvex;
struct ArcNode *hlink,*tlink;
/ /InfoType info;
}ArcNode;
typedef struct Vode {//顶点表
vertexType data;
ArcNode *firstin,*firstout;
}VNode;
typedef struct{//十字链表
vNode xlist[MaxvertexNum];
int vexnum,arcnum;//顶点数量 边的数量
}GLGraph;
4.临界多重表
邻接多重表无向图的一种链式存储结构
邻接表

操作效率低

firstedge:边表单链表的指针
ivex:该边表第一个端点
ilink:与该端点相邻的下一个边表的指针
jvex:第二个端点
jlink:第二个端点相邻的下一个边表的指针
info:权值
mark:标记

define MaxvertexNum 100
typedef struct ArcNode{//边表
int ivex, jvex;
struct ArcNode *ilink,*jlink;
/ /InfoType info;
/ /bool mark;
)ArcNode;
typedef struct VNode{//顶点表结构体
vertexType data;
ArcNode *firstedge ;
vNode;
typedef struct{//临接多重表
vNode adjmulist[MaxvertexNum];
int vexnum, arcnum;
}AMLGraph;
十字链表与临界多重表


博客介绍了图的多种存储结构,包括邻接矩阵(适用于稠密图,有向图和无向图有不同特点)、邻接表法(为顶点建单链表存相邻边)、十字链表(有向图链式存储)和临界多重表(无向图链式存储),还提及了各结构的相关属性和指针。
2581

被折叠的 条评论
为什么被折叠?



