对于邻接表存储无向图,结点的个数是边数的两倍,如图:
该图有5条边,用邻接表存储:
结点是边数的2倍,而且对边进行操作时(比如删除,插入等)要对两个顶点操作,比较麻烦,所以书上又介绍了邻接多重表:
对于这张图G1的邻接多重表的图,我就纳闷了,比如用邻接多重表创建无向图时,输入序列(权值暂且不考虑,为0):
0 1 0
0 3 0
1 2 0
1 4 0
2 3 0
2 4 0
嗯,输入0 1 0,0 3 0 时直接建立新结点,同时v1指向结点(0,1),v3指向结点(0,3),这么表示应该能懂吧?然后是1 2 0,现在怎么办呢?新建一个结点?,但是v1的指针域已经指向了创建的结点(0,1)。。。。
想了很久,还是觉得用自己的吧,索性在顶点结点结构体中增加一个指针域,类似十字链表,书不能不信,也不能全信,不管书错没错,总之,自己在将概念转化为自己动手实现,并体会其中是怎么一步一步建立的这种过程,会收获很多,再看一下书上十字链表的建立算法(书上是c实现的):
自己弄懂才是自己的,自己实现出来才会有收获,眼高手低也不行
所以我就将邻接多重表的顶点结点添加了一个指针,类似十字链表,由于基本上和十字链表差不多,就不贴源码了,