14 图的基础知识-几种常用的存储结构
时间有点紧 没时间接着更了。。考完研回头再写吧
一、邻接矩阵
1、描述:用一维数组存储图顶点的信息
用二维数组存储图边的信息
2、特点:
①无向图的邻接矩阵:
是唯一的对称矩阵,可以压缩存储(仅存储上/下三角);
第i行(列)非零元素为第i个顶点的度
②有向图的邻接矩阵:
第i行(列)的非零元素为第i个顶点的出度(入度);
③邻接矩阵的局限性:要确定多少边必须按行列检测,花费时间的代价很大。
④用于确定两点之间是否有边非常方便
⑤设图G邻接矩阵为A,A的n次方元素A^n[i][j]等于由顶点i~j长度为n的路径的数目
适用:存储稠密图
空间复杂度:O(n²);其中n为图顶点数|V|
3、存储结构定义
1 #define maxVertexnum 100 2 typedef struct{ 3 int V[maxVertexnum];//顶点表 4 int edge[maxVertexnum][maxVertexnum];//边表 5 int vexnum,arcnum;//当前顶点数,弧数 6 }Mgraph;
二、邻接表
1、描述:对于图G中每个顶点建一个单链表(顶点表结点),第i个单链表中结点表示依附vi的边(边表结点)
2、特点:
①无向图需要的存储空间:O(|V|+2|E|)//无向图中每个边在表中出现2次
有向图需要的存储空间:O(|V|+|E|)
②稀疏图用这个存储贼省空间!
③优:查一个点有几个关系边很方便
缺:查入度需要遍历整个表(麻烦),判断两个顶边之间是否存在边效率低
④表示不唯一
3、存储结构定义:
1 #define maxVertexnum 100 2 /*边表结点*/ 3 typedef struct ArcNode{ 4 int adjvex; //表示弧指向的顶点位置 5 struct ArcNode *next;//指向下一条弧的指针 6 }ArcNode; 7 /*顶点表结点*/ 8 typedef struct VNode{ 9 VertexType data; //顶点信息 10 ArcNode *first;//指向第一个依附该顶点的弧的指针 11 }VNode,AdjList[maxVertexnum]; 12 /*临接表*/ 13 typedef struct{ 14 AdjList vertex; //邻接表 15 int vexnum,arcnum;//图的顶点数与弧数 16 }ALGraph
三、十字链表【针对有向图】
描述:一种链式存储的结构。
1、特点:
①每一条边用一个结点表示
②顶点之间是顺序存储
③很容易求顶点出度与入度
④表示不唯一,但唯一确定一个图
2、组成:
弧结点:尾域tailvex/头域headvex/链域hlink(指向弧头相同的下一条弧)/尾域tlink(指向弧尾相同的下一条弧)/数据域(data)
光描述有点抽象 上个图
3、存储结构定义
1 #define maxVertexNum 100 2 /*边表结点*/ 3 typedef struct ArcNode{ 4 int tailvex,headvex;//弧的头尾结点 5 struct ArcNode *hlink,*tlink;//分别指向弧头弧尾相同的结点 6 int data; 7 }ArcNode; 8 /*顶点表*/ 9 typedef struct VNode{ 10 VertexType data;//顶点信息 11 ArcNode *firstin,*firstout;//指向第一条入弧和出弧 12 }VNode; 13 /*邻接表*/ 14 typedef struct{ 15 VNode xlist[maxVertexNum];//邻接表 16 int vexnum,arcnum;//记录图的顶点数与弧数 17 }GLGraph;
四、邻接多重表【针对无向图】
描述:为了解决邻接表判断两顶点之间是否存在边或者需要对边执行删除操作效率低的问题而诞生
所有依附于同一顶点的边串联在同一链表中
1、特点:
①每条边只有一个结点
②每个边结点同时连接在两个链表中
二、组成:
边结点:
mark(标识域,用于标记该边是否被搜索过。)
ivex/jvex(该边依附的两顶点在图中的位置)
ilink/jlink(指向下一条依附于顶点ivex/jvex的边)
data/(数据域)
上个图
三、存储结构定义
1 #define maxVertexNum 100 2 /*边表结点*/ 3 typedef struct ArcNode{ 4 bool mark; //访问标记 5 int ivex,jvex;//分别指向该弧的两个结点 6 struct ArcNode *hlink,*tlink;//分别指向弧头弧尾相同的结点 7 int data; 8 }ArcNode; 9 /*顶点表*/ 10 typedef struct VNode{ 11 VertexType data;//顶点信息 12 ArcNode *firstedge;//指向第一条依附该顶点的边 13 }VNode; 14 /*邻接表*/ 15 typedef struct{ 16 VNode adjmulist[maxVertexNum];//邻接表 17 int vexnum,arcnum;//记录图的顶点数与弧数 18 }AMLGraph;
转载于:https://www.cnblogs.com/AKsnoopy/p/7609152.html
14 图的基础知识-几种常用的存储结构相关推荐
- 计算机基础知识WORD7,计算机基础知识:Word常用操作(7).doc
计算机基础知识:Word常用操作(七) [导语]在事业单位考试中,计算机专业知识的复习向来是考生复习备考阶段的一大重点,河南人事考试网为计算机基础知识的复习为考生提供知识点梳理,帮助考生备考! 一.打 ...
- 3dmax基础知识:3dmax常用功能详解,零基础小白的福音
你收藏了那么多教程,却不知道3dmax怎么入门?掌握3dmax常用功能是3dmax入门的基础之一,今天就为您盘点了一些3dmax最常用到的功能和使用方法,快来和小编一起学习3dmax入门基础知识吧! ...
- CSS基础知识---三种选择器
CSS基础知识---三种选择器 选择器 标签选择器 id选择器 class选择器 全部代码 选择器 标签选择器 id选择器 class选择器 标签选择器 选择器优先级:id>class>标 ...
- 前端地图分类(包括坐标系,GIS基础知识,2D与3D地图结构划分)
前端地图分类(包括坐标系,GIS基础知识,2D与3D地图结构划分) 经度:longitude(lng, 0 < lng < 180) 纬度:latitude(lat, 0 < lat ...
- C++:C++语言入门级基础知识考察点回顾之函数、结构体和类
C++:C++语言入门级基础知识考察点回顾之函数.结构体和类 目录 C++的函数 1.函数的定义.调用,全局变量局部变量 1.1.自定义函数求其倒数
- Atitit.数据索引 的种类以及原理实现机制 索引常用的存储结构
Atitit.数据索引 的种类以及原理实现机制 索引常用的存储结构 1. 索引的分类1 1.1. 索引的类型 按查找方式分,两种,分块索引 vs编号索引1 1.2. 按索引与数据的查找顺序可分为 正 ...
- 机器视觉基础知识/经典系统/常用领域以及机器视觉常用的图像处理库
[0-定义] **计算机视觉:**一门研究如何使机器"看"的科学,更进一步的说,就是指用摄影机和计算机代替人眼对目标进行识别.跟踪和测量等机器视觉,并进一步做图像处理,用计算机处理 ...
- Javascript基础知识之四(常用数组方法)
一.MDN链接 Array - JavaScript | MDNJavaScript的 Array 对象是用于构造数组的全局对象,数组是类似于列表的高阶对象.https://developer.moz ...
- kettle对字符串去除空格_整理|ABAP基础知识二:常用字符串处理
常用字符串处理 上一期整理了ABAP的数据类型和定义,今天我们整理一下开发过程中常见的字符串处理命令.虽然说这些基础知识对于已经熟练使用Ctrl c + Ctrl v的资深码农来说过于简单.但是对于一 ...
最新文章
- Object-C---gt;Swift之(八)类和结构体
- 比特币现金锚定货币交易所越来越多
- CodeChef Cards, bags and coins [DP 泛型背包]
- Python 的 Magic Methods 指南(转)
- 蓝桥杯基础模块4_2:独立按键扩展应用
- React开发(136):ant design学习指南之form中动态form新增删除
- jquery获取radio的值,a标签传值
- void类型及void指针
- 构建数据库云管平台 实现数据价值最大化
- Звезда 星星
- 三角网导线平差实例_导线平差实例(一):简易平差
- 轻松搞懂【TF-IDF、word2vec、svm、cnn、textcnn、bilstm、cnn+bilstm、bilstm+attention实现】英文长文本分类
- 网络云存储技术Windows server 2012 (项目六 存储服务器的数据备份与还原 windows Server Backup)
- 芝诺数解|「八」旅途中的“家”——重庆酒店特征分析
- 【FPGA】基于OV5640的 图像边沿检测
- 装linux系统的工具箱,PE,Dos工具箱,自动安装linux的U盘制作
- 什么是触发器,MySQL都有哪些触发器?
- FPGA与单片机之间的数据通信
- 开发单片机常见的IDE有哪些?
- 【Linux】常见命令总结
热门文章
- SHOW PROCESSLIST 命令详解 (查看锁表)
- java泛型之有界类型
- 【转】Jquery -Ajax 入门练习 Jquery.Ajax 调用后台函数,获取DataTable Json,Asp.net
- SSL只是基本安全措施
- 3.5.6 轮询访问介质访问控制
- 21天学MySQL_把整个Mysql拆分成21天,轻松掌握,搞定(下)
- 郭天祥:我的大学六年
- SQL SERVER全面优化-------写出好语句是习惯
- 如何看待2016年安防市场?
- Windows 10如何使用文件历史记录备份个人文件