6.2 数据结构——图的抽象数据类型和存储结构

6.2.1 图的抽象数据类型

ADT Graph
{
    数据对象V:具有相同特性的数据元素的集合,称为顶点集
    数据关系R:R = {VR} VR = {<V,W> | <V,W> | V,W ∈ V ^ P(V,W)}
            <V,W>表示从V到W的弧,P(V,W)定义了弧<V,W>的信息。
    
    基本操作P:
        CreateGraph(*G, V, VR);
        初始条件:V是图的顶点集,VR是图中弧的集合。
        操作结果:按V和VR的定义构造图G。

        DFSTraverse(G)
        初始条件:图G已存在。
        操作结果:对图进行深度优先遍历。

        BFSTraverse(G)
        初始条件:图G已存在。
        操作结果:对图进行广度优先遍历。
}ADT Graph

6.2.2 图的存储结构

图的逻辑结构是多对多。

图没有顺序存储结构,但可以借助二维数组来表示元素间的关系,即数组表示法(邻接距阵)。

图的链式存储结构:

 6.2.3 数组(邻接距阵)表示法

建立一个顶点表(记录各个顶点信息)和一个邻接矩阵(表示各个顶点之间的关系)。

设图G = (V,E)有n个顶点,则顶点表vexs:

i012...n
vexsV1V2V3....Vn

图的邻接矩阵(Adjacency Matrix)是一个二维数组G.arcs[n][n],定义为:

无向图的邻接矩阵表示法:

 

分析1:无向图的邻接距阵是对称的。

分析2:顶点i的度等于第i行(列)中1的个数。

注意:完全图的邻接矩阵中,对角元素为0,其余为1。

有向图的邻接矩阵表示法:

 

在有向图的邻接矩阵中:

第i行的含义:以顶点vi为尾的弧(即出度边);

第i列的含义:以顶点vi为头的弧(即入度边)。

分析1:有向图的邻接矩阵可能是不对称的。

分析2:顶点的出度等于第i行为1的元素之和,顶点的入度等于第i列为1的元素之和;顶点的度等于第i行为1的元素之和 + 第i列为1的元素之和。

网的邻接距阵表示法:

邻接距阵的存储表:用两个数组分别存储顶点表和邻接矩阵。

邻接矩阵的定义:

#define MVNum 100  //最大顶点数

typedef char VerTexType;
typedef int ArcType;

typedef struct
{
    VerTexType vexs[MVNum];  //顶点表
    ArcType arcs[MVNum][MVNum];   //邻接矩阵
    int vexnum, arcnum;   //顶点数和边数
}AMGraph;

邻接矩阵的优点:

1、直观、简单、容易理解;

2、方便检查任意一对顶点间是否存在边;

3、方便找任一顶点的所有“邻接点”;

4、方便计算任一顶点的“度”。

邻接距阵的缺点:

1、不便于增加和删除;

2、存放稀疏图是比较浪费空间,适用于稠密图;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值