由上篇文章图的存储结构之邻接矩阵中,空间复杂度位n^2,我们能看到,对于顶点个数多,而边数少的图,我们创建邻接矩阵会造成很大的空间浪费,这就需要另外一种存储方式------邻接表。
- 邻接表的顶点用一维数组存储,这和邻接矩阵是一致 的,并且方便读取和存储,当然你也能用链表来存储。
- 每个顶点Vi的所有邻接点构成一个线性表,由于邻接点的个数不确定,所以要选择单链表存储。
代码伺候:用到了单链表的首元结点的插入以及单链表的遍历
// 图的存储结构之邻接表
//图是由顶点表和边表以及顶点个数和边数组成的,并且知道顶点表就能索引出表链表,所以一个图变量中只有顶点表和顶点个数以及边数就ok了
//首先定义边表结点,然后定义顶点表结点(包括数据域:顶点的名称呢,指针域存放的是边表结点指针)和顶点表,最后定义一个图。
#include "stdafx.h"
#include "stdio.h"
#include "malloc.h"
#include "string.h"
#define vexmaxnum 100
#define DEBUG
typedef char vextype;
typedef int edgetype;
typedef struct edgenod { //定义边表结点
int adjvex; //存储邻接顶点在顶点表中的下标
edgetype weight;
edgenod *next;
}edgenod;
typedef struct vexnode { //定义顶点表结点
vextype data[5]; //数据类型
edgenod *next; //存放的是边表结点的指针