一、邻接表法
使用一个顶点表存储顶点信息,每个顶点之后连接该顶点的相连边的信息(链表)。
结构体定义
#define max 100
typedef struct Node //边
{
int node; //指向的节点
struct Node* next; //下一条弧指针
// int val //可以加权值
}ArcNode;
typedef struct //顶点
{
char head; //顶点信息,可根据需要定义
ArcNode* first; //第一条弧
}headList;
typedef struct {
headList list[max]; //顶点表
int headnum,arcnum; //边数,弧数
}ALGraph;
二、复杂度分析(G(V,E))
1.无向图
空间复杂度:O(V+2E)
求顶点的度的时间复杂度:O(N)(遍历对应顶点的链表)
2.有向图
空间复杂度:O(V+E)
求度的时间复杂度:
出度:遍历对应顶点的链表(O(N))
入读:遍历所有顶点的链表(O(N2))
总结(和邻接矩阵的对比)