第七章:2—图的存储结构

图的逻辑结构

在这里插入图片描述
在这里插入图片描述

1.邻接矩阵表示法

在这里插入图片描述

无向图的邻接矩阵

在这里插入图片描述

有向图的邻接矩阵

在这里插入图片描述

在这里插入图片描述

邻接矩阵的存储表示

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

#define MVNum 100         //最大顶点数
typedef char  VerTexType;//设顶点的数据类型为字符型
typedef int ArcType;     //假设边的权值类型为整型

typedef struct{
	VerTexType vexs[MVNum];       //顶点表
	ArcType  arcs[MVNum][MVnum];  //邻接矩阵
	int vertexNum,arcNum;       //顶点数和边数
}MGraph;                   //MGraph是以邻接矩阵存储的图类型

采用邻接矩阵表示法创建无向网

在这里插入图片描述

在这里插入图片描述
极大值可以设置如下:

#define Maxint 32767  

在这里插入图片描述
在这里插入图片描述

无向网—>有向图

在这里插入图片描述

采用邻接矩阵表示法的优缺点

在这里插入图片描述
在这里插入图片描述

2.邻接表

邻接表表示法(链式)

在这里插入图片描述
firstarc:边表头指针
adjvex: 邻接点域,存放域Vi邻接的顶点在表头数组中的位置。
nextarc: 链域,指向下一条边或弧。
info: 权值或其他信息

无向图的邻接表

在这里插入图片描述
存储空间:O(n+2e)

有向图的邻接表

在这里插入图片描述

练习:已知某网的领接(出边)表,请画出该网络。
在这里插入图片描述

如下:
在这里插入图片描述

建立邻接表的算法

图的邻接表存储表示:
![在这里插入图片描述](https://img-blog.csdnimg.cn/6f5d53abdb3645fbb1335b84f92e3ec2.png

/***
    顶点节点
***/
typedef struct VNode{
	VertexType data;        //顶点信息
	ArcNode *firstarc;      //边表头指针
}VNode,AdjList[MVNum];

在这里插入图片描述

#define MaxVerteNum 100   //最大顶点数为100
/***
    边节点
***/
typedef struct ArcNode{
	int adjvex;               //该边所指向的顶点的位置
	struct ArcNode *nextarc;  //指向下一条边的指针
	OtherInfo   info;         //和边相关的信息
}ArcNode;

在这里插入图片描述

/***
    邻接表
***/
typedef struct{
	AdjLint vertices;    //领接表  vertices--vertex的复数
	int vexnum,arcnum;   //图的当前顶点数和弧数
}ALGraph;

在这里插入图片描述

采用领接表表示法创建无向网

【算法思想】
(1)输入总顶点数总边数
(2)建立顶点表
    依次输入点的信息存入顶点表
   使每个表头节点的指针域初始化为NULL
(3)创建邻接表
    依次输入两条边依附的两个顶点
    确定两个顶点的序号i和j,建立边节点
    将此边结点分别插入到Vi和Vj对应的两个边链表的头部
在这里插入图片描述
在这里插入图片描述

邻接表表示法优缺点及邻接矩阵的关系

在这里插入图片描述
邻接矩阵与邻接表表示法的关系
在这里插入图片描述
在这里插入图片描述

3.十字链表

在这里插入图片描述
firstin:第一条入度边
firstout:第一条出度边

tailvex:弧尾结点
headvex:弧头结点
hlink:弧头相同的下一条弧
tlink:弧尾相同的下一条弧

4.邻接多重表


在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值