大话数据结构 -07-1 图的定义、抽象数据类型与存储结构

1. 定义

在图结构中,结点之间的关系可以是任意的,图中任意两个数据元素之间都可能相关。

2. 与线性表、树结构的区别

3. 相关定义

(1)无向、有向

与图边或者弧相关的数字叫做权(Weight),带权的图通常称为网(Network)

 

(2) 图的顶点与边间的关系

无向图:

边数等于各顶点度数和的一半(因为重复两次计数)

 有向图:

 

注意:

【1】图中顶点与顶点之间的路径并不是唯一的

【2】

【3】

(3)连通图相关术语

1无向连通图

【2】连通分量

注意这里极大的含义,是指能连通的最大结点。非连通图也可能含有连通分量!!

 

此:图1有两个连通分量(图2与图3),图3满足极大顶点数(没有顶点能再与其连接),图4不满足极大定点数(还有D能与其相连)

 【3】有向图(每一对顶点)

怎么理解??

【4】连通图的生成树

但是n-1条边并不一定是生成树

4. 图的抽象数据类型

5. 图的存储结构(共有五种不同的存储结构)

(1)邻接矩阵

 

【1】无向图

注意:矩阵主对角线的值全为0,因为不存在顶点到自身的 边

          无向图的边数组是一个对称矩阵(以从左上角到右下角的主对角线为轴)

规律:

【2】有向图

 

【3】网

代码实现

 

创建网

缺点:对于边数相对于顶点较少的图,该结构存在对存储空间的极大浪费

(2)邻接表

 

【1】无向图

【2】有向图

容易得到每个顶点的出度。

有时为了确定顶点的入度或以顶点为弧头的弧,可以建立一个有向图的逆邻接表。

【3】带权重的网图

【4】实现代码:

结点定义代码

 

无向图邻接表创建

代码中使用了头插法

对于无向图:

缺点:

(3)十字链表(适用于有向图)

 

(4)邻接多重表(无向图)

 

具体实现:

邻接多重表与邻接表的差别,仅仅是在于同一条边在邻接表中用两个结点表示,而在邻接多重表中只有一个结点。

(5)边集数组

 

posted @ 2018-12-21 15:47  GuoXinxin  阅读(724)  评论(0编辑  收藏  举报