图的存储结构(邻接表)
让编程改变世界
Change the world by program
邻接表(无向图)
邻接矩阵看上去是个不错的选择,首先是容易理解,第二是索引和编排都很舒服~ 但是我们也发现,对于边数相对顶点较少的图,这种结构无疑是存在对存储空间的极大浪费。 [caption id="attachment_2524" align="alignnone" width="600"]![邻接表(有向图)](https://i-blog.csdnimg.cn/blog_migrate/c5d42102e9d35f8a9bdb8a0717d3e2be.png)
- 图中顶点用一个一维数组存储,当然,顶点也可以用单链表来存储,不过数组可以较容易地读取顶点信息,更加方便。
- 图中每个顶点Vi的所有邻接点构成一个线性表,由于邻接点的个数不确定,所以我们选择用单链表来存储。
![邻接表(无向图)](https://i-blog.csdnimg.cn/blog_migrate/4a6a5844ff1ca051272fbf742b84e07b.png)
邻接表(有向图)
若是有向图,邻接表结构也是类似的,我们先来看下把顶点当弧尾建立的邻接表,这样很容易就可以得到每个顶点的出度:![邻接表(有向图)](https://i-blog.csdnimg.cn/blog_migrate/7c1645fd3b4afcf9c7c177a5123a84a3.png)
![邻接表(有向图)](https://i-blog.csdnimg.cn/blog_migrate/0d8769f456e623259dd16f0e3ec17e24.png)
邻接表(网)
对于带权值的网图,可以在边表结点定义中再增加一个数据域来存储权值即可: [caption id="attachment_2529" align="alignnone" width="600"]![邻接表(网)](https://i-blog.csdnimg.cn/blog_migrate/adadee9ea1abe155b56fd717278dcd3b.png)