领接表法(顺序存储+链式存储)
代码:
cpp
#define MaxVertextNum 10
//边(弧)
typedef struct ArcNode {
int adjvex;//边/弧指向哪个结点
struct ArcNode* next;//指向下一条弧的指针
//InfoType info;//边权值
}ArcNode;
//顶点
typedef struct VNode {
VertexType data;//顶点信息
ArcNode* first;//第一条边/弧
}VNode,AdjList[MaxVertextNum];
//用领接表存储的图
typedef struct {
AdjList vertices;
int vexnum,arcnum;
}ALGraph;
- 在无向图中边结点的数量是2|E|,整体空间复杂度为O(|V|+2|E|)
- 在无向图中边结点的数量是|E|,整体空间复杂度为O(|V|+|E|)
如何求顶点的度、入度和出度?
无向图
有多少边结点就有多少度
有向图
有向图的度=入度+出度
出度:
-
遍历顶点 :对于图中的每个顶点
v
:a. 遍历边 :遍历顶点
v
的所有出边(即所有形式为(v, w)
的边,其中w
是另一个顶点)。b. 计数 :对于每一条出边,将顶点
v
的出度计数增加1。
入度:
- 遍历边 :遍历图中的所有边
(v, w)
:例如寻找入度a的弧,遍历完后找到所有指向0的弧
注意
图的领接表表示方式不唯一
图的领接矩阵表示方式唯一