0.PTA总分
1.本周学习总结
1.1 总结图内容
图存储结构
- 邻接矩阵
简单来讲使用二维数组进行存储,设位edge[M][N]。其中,M,N代表两个顶点,edge[M][N]可代表是否连通或者权值。
邻接矩阵的特点:
- 若图为无向图,则矩阵是沿对角线是对称的。
- 可以直接访问顶点M,N间边的关系以及权值。
缺点:
- 存储的图为稀疏图时,浪费的空间较多,n个顶点所需空间至少为n^2。
结构体定义
typedef struct //图的定义
{ int edges[MAXV][MAXV]; //邻接矩阵
int n,e; //顶点数,边数
} MGraph;
- 邻接表
采用结构体数组跟链表结合,存储每个顶点的临边
特点:
- 存储的图为无向图时,遍历顶点数组每个临边即可遍历整张图
- 相比于邻接矩阵更节省空间
缺点
- 无法直接知道任一两个顶点之间的关系。
- 存储的图为有向图时,同一条边会生成两条链。
结构体定义
typedef struct ANode
{
int adjvex; //该边的终点编号
struct ANode *nextarc; //指向下一条边的指针
int info; //该边的相关信息,如权重
} ArcNode; //边表节点类型
typedef int Vertex;
typedef struct Vnode
{
Vertex data; //顶点信息
ArcNode *firstarc; //指向第一条边
} VNode; //邻接表头节点类型
typedef VNode AdjList[MAXV]; //头结点数组
typedef struct
{
AdjList adjlist; //邻接表
int n,e; //图中顶点数n和边数e
} AdjGraph;