邻接表的出现是因为图若是稀疏图,用邻接矩阵会造成空间的浪费,毕竟你要开辟一个一维数组和一个二维数组嘛,而且还是大开小用的那种。
邻接表为了避免内存的浪费引入了链式存储,它的处理办法是:
1.用一个一维数组存储顶点,当然你也可以用单链表存储,
2.用单链表存储顶点的邻接点,可以将顶点改为结构体数组,结构体中存放邻接点的指针,邻接点也创建一个结构体,定义指针next存放该顶点的另一个邻接点,这样就可以把该顶点的所有邻接点串起来了。
下面是一个无向的网图:
邻接表中数据的存储图示如下
顶点表也就是个结构体数组,是存放顶点的结构,顶点表中有data元素,存放顶点信息 firstarc是一个边结构体表指针,存放邻接点的信息。
边表也是一个结构体,内有adivex元素,存放邻接点的下标,weight存放顶点与邻接点之间线的权重,next是边表结构体指针,存放该顶点的下一个邻接点,next就是负责将顶点的邻接点连起来。