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、存放稀疏图是比较浪费空间,适用于稠密图;

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
一、 题目:抽象数据类型实现 利用VC++的工作环境实现教材里的基本抽象数据类型。按照课本的要求运用c语言以及数据结构课程所学的知识,设计合理的数据存储结果,实现的基本操作。 二、 抽象数据类型定义以及各基本操作的简要描述 ADT MGraph{ 数据对象:n=n是具有相同特征的数据元素集合,称为顶点集。 数据关系:DR={<v,w>|v,w∈n且<v,w>表示从v指向w的弧} 基本操作: CreateMGraph 初始条件:n是的顶点集,e是的边集 操作结果:按和n的e定义构造G DestroyGraph 初始条件: G存在 操作结果: 销毁G GetVex 初始条件: G存在,v是G中某个顶点 操作结果: 返回v的值 LocateVex 初始条件:G存在,v和G中顶点有相同特征 操作结果:若G中存在顶点v,则返回该顶点再中的位置;否则返回空 PutVex 初始条件: G存在,v是G中某个顶点 操作结果: 对v赋值u FirstAdjVex 初始条件: G存在,v是G中某个顶点 */ 操作结果: 返回的第一个邻接顶点。若顶点在G中没有邻接顶点,则返回空 NextAdjVex 初始条件: G存在,v是G中某个顶点,w是v的邻接顶点 操作结果: 返回v(相对w)的下一个邻接顶点。若w是v的最后一个邻接点,则返回空 InsertVex 初始条件: G存在,v和G中顶点有相同特征 操作结果: 在G中增添新顶点v(不增添与顶点相关的边,留待InsertArc()去做) DeleteVex 初始条件: G存在,v是G中某个顶点 操作结果: 删除G中顶点v及其相关的弧 InsertArc 初始条件: G存在,v和W是G中两个顶点 操作结果: 在G中增添弧<v,w> DeleteArc 初始条件: G存在,v和w是G中两个顶点 操作结果: 在G中删除弧<v,w> DFSTraverseM 初始条件:G存在 操作结果:对进行深度优先遍历 BFSTraverseM 初始条件:G存在 操作结果:对进行广度优先遍历 }ADT MGraph

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值