一、图的储存
邻接矩阵:
1.概念
![61cdf9adf13db912c7c384166306afdf.png](https://i-blog.csdnimg.cn/blog_migrate/6ca77fc753f610dddff79b97dce51465.jpeg)
- 有向图:(i,j)之间1为两个顶点之间有通路,没有为0。
- 无向图:同有向图,若(i,j)为1,则(j,i)也一定为1.
- 网:(i,j)的值表示顶点i到顶点j的边的权,若就i与j之间没有边,值为无穷。
//邻接矩阵存储结构定义
2.补充复习C语言知识点:
struct和typedef struct
//结构声明:
我们可以把以上代码简化:
struct
使用typedef:
typedef
3.特点
- 无向图的邻接矩阵一定是一个对称矩阵,在实际的存储中只需要存储一个三角。
- 无向图,第i行(列)的非零元素的个数就是第i个顶点的度。
- 有向图,第i行(列)的非零(非无穷)元素的个数就是第i个顶点的出度(入度)。
- 稠密图比较适合邻接矩阵储存。
邻接表
1.概念
![448a6657a2d090e41397afbacadd0d95.png](https://i-blog.csdnimg.cn/blog_migrate/bf418c46316766da7e4444b12773ba5d.jpeg)
![73761279fadb8678ae6a697138758098.png](https://i-blog.csdnimg.cn/blog_migrate/274485604f95ac281775c58f0540ecec.png)
本质上是由顺序表加链表组成的,头指针和顶点的数据信息采用顺序存储(称为顶点表),然后对每一个顶点都建立一个单链表,单链表中的结点表示依附于顶点的边,这个单链表称为边表。
在邻接表中存在两种结点: 顶点表结点和边表结点
![05a36241ae2924a8c1ab5a2faf4d2d21.png](https://i-blog.csdnimg.cn/blog_migrate/bf586b1b49b45f0c5bff287199484514.png)
#define MaxVertexNum 100
2.特点
- 若G为无向图,则所需的存储空间为O(|V|+2|E|)。若G为有向图,则所需的存储空间O(|V|+|E|)。
- 稀疏图用邻接表表示将极大地节省存储空间。
- 图的邻接表不唯一
十字链表
1.概念:
有向图的一种链式存储结构。