1.邻接表表示法(链式)


头结点存储的是邻接点的序号和下一个顶点的地址域。

这里的adjvex是邻接点域:存放与vi邻接的顶点在表头数组中的位置。
nextarc:链域:指示下一条边或弧。
后面还可以加一个存储空间info:存储当前的权值。
邻接表的特点:


有向图只记录以v1为出度的顶点。
特点:



typedef struct VNode {
VerTexType data;//顶点信息
ArcNode* firstarc;//指向第一条依附于顶点的边的指针
}VNode,AdjList[MVNum];//AdjList表示邻接表的类型
AdjList v:就是v里面的每一个变量都有数据和指针的两个部分; 相当于 VNode v[MVNum];

typedef struct ArcNode {//边结点
int adjvex;//该边所指向的顶点的位置
struct ArcNode* nextarc;//指向下一条边的指针
OtherInfo info;//和边相关的信息
}ArcNode;
图的结构定义:
typedef struct {
AdjList vertices;//邻接表类型的数组,存储着所有的结点
int vexnum, arcnum;//图的所有顶点和边(弧)
}ALGraph;

ALGraph G{};//定义了邻接表示的图G
G.vexnum = 5;
G.arcnum = 5;//定义了5个顶点,5条边
G.vertices[1].data = 'b';//图G的第二个顶点是b
p = G.vertices[1].firstarc;//指针p指向顶点b的第一条边的结点
p->adjvex = 4;//p指针所指结点是到下标为4的结点的边