DS-图

前言


数据结构中的有关图的内容应用领域比较广泛,涉及到的知识点也比较多,从图的基本知识点、存储结构、图的遍历、最小生成树算法、最短路径算法、拓扑排序解决有向无环图问题以及关键路径确定等内容研究图的有关知识和应用方面。

基本知识


  • 图的定义
  • 弧、弧尾、弧头
  • 带权图、有向图、无向图
  • 完全图
  • 简单图、稀疏图、稠密图
  • 权、网、路径、邻接点
  • 连通图、强连通图、弱连通图

抽象数据类型


ADT Graph{
	D
	//顶点的有穷非空集合
	S
	//边的有穷集合
	P
	/*
	创建与销毁 CreateGraph、DestoryGraph
	定位顶点LocateVex、查找顶点值GetVex、顶点赋值PutVex
	取第一个邻接点FirstAdjVex、取下一个邻接点NextAdjVex
	顶点的插入与删除 InsertVex、DeleteVex
	边或弧的插入与删除 InsertArc、DeleteArc
	深度、广度优先遍历 DFSTraverse、BFSTraverse
	*/
} end ADT

存储类型


图的存储类型有多个:邻接矩阵、邻接表、邻接多重矩阵、十字链表、边集数组。
文章中关于存储类型的代码展示主要是包括邻接矩阵和邻接表。

(带权的)邻接链表存储方式

#include<iostream>
#define Maxsize 10
using namespace std;
 
typedef char VertexType;
typedef int EdgeType;

//定义一个带权图中的结点结构体类型 
typedef struct Node{
	int adjvex;//顶点编号 有向图中的弧头顶点 
	EdgeType weight;//此边对应的权值 
	struct Node *next;//相同弧尾的下一条边 
}EdgeNode;

//定义一个邻接表表头的结构体类型 
typedef struct{
	VertexType data;//数据域 
	EdgeNode *firstEdge;//存放指向邻接链表第一个结点的地址的指针 
}VertexNode,ADJList[Maxsize];//ADJList表示这种邻接表结构体类型的集合

//邻接表表示图的集合 
typedef struct{
	ADJList adjLists;//含边信息的顶点集合 
	int numVertex,numEdge;//顶点的数目 边的数目 
}GraphADJList; 

图的邻接矩阵存储方式

#include<iostream>
#define Maxsize 10
using namespace std;

typedef char VertexType;
typedef int EdgeType;

//定义图的邻接矩阵存储表示的结构体类型 
typedef struct{
	VertexType Vexs[Maxsize];//图的顶点集合 
	EdgeType Edges[Maxsize][Maxsize];//图的边集合 
	int numVertex,numEdge;//图的顶点数 边数 
}GraphAMatrix; 

由于最常用的是上两种图的存储方式,因此邻接多重链表、十字链表、边集数组等存储方式不罗列,下图分别说明各种存储方式的优劣处对比:

这里写图片描述

图的遍历


这里图的遍历会给出两种不同存储结构的DFS(深度优先搜索)和BFS(广度优先搜索)的程序展示。
原算法博客地址:https://blog.csdn.net/Gerald_Jones/article/details/80158868

最小生成树问题


这里会给出两种不同的算法prim算法和kruskal算法以及程序的展示。
原算法博客地址:https://blog.csdn.net/Gerald_Jones/article/details/80181297

最短路径问题


这里会给出Dijkstral算法和Floyd算法以及其他的一些求取最短路径的算法程序的展示。
原算法博客地址:https://blog.csdn.net/Gerald_Jones/article/details/85604412

关键路径问题


如果后续博主有空闲时间,会对关键路径的AOE网进行详细的分析总结。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值