7.2.2 图的邻接表存储表示 类似于树的孩子链表,将和同一顶点"相邻接"的所有邻接点链接在一个单链表中,单链表的头指针则和顶点信息一起存储在一个一维数组中。 图的邻接表存储表示 const MAX_VERTEX_NUM = 20; typedef struct ArcNode { // 弧结点的结构 int adjvex; // 该弧所指向的顶点的位置 struct ArcNode *nextarc; // 指向下一条弧的指针 VRType weight; // 与弧相关的权值,无权则为0 InfoType *info; // 指向该弧相关信息的指针 } ; typedef struct VNode { // 顶点结点的结构 VertexType data; // 顶点信息 ArcNode *firstarc; // 指向第一条依附该顶点的弧 } AdjList[MAX_VERTEX_NUM]; typedef struct { // 图的邻接表结构定义 AdjList vertices; // 顶点数组 int vexnum, arcnum; // 图的当前顶点数和弧数 GraphKind kind; // 图的种类标志 } ALGraph; |
按下页算法7.1建立的无向图G2 的邻接表如下所示: 依次输入的数据为: 6 7 AG A B C D E F AB AE BE BF CD CF DF 从算法可见,每生成一个弧的结点之后是按在第2章中惯用的"倒插"方法插入到相应顶点的邻接表中的。并且对于无向图,每输入一条边需要生成两个结点,分别插入在这条边的两个顶点的链表中。即无向图的邻接表中弧结点的个数为图中边的数目的两倍。 |