有向图数据结构_从零开始学习数据结构>图之邻接矩阵

学习完“树”的数据结构,接下来就是“图”了,越复杂的数据结构,其实用性往往是最强的,图是需要掌握的。 1、图 (1).图是一种非线性结构;主要由顶点和边构成; (2).<> 代表有向图,( )代表无向图; (3).无向图有N个顶点时,最多有N*(N-1)/2条边;有向图最多有N*(N-1)条边; (4).权:边上具有相关的数,带权图叫做网络; (5).邻接顶点: 与其接触边上的顶点; (6).度:与顶点V关联的边数;有向图中度 = 出度 + 入度; (7).简单路径:路径上各顶点互不重复; (8).回路/环:路径上第一个顶点与最后一个顶点重合; (9).连通图/强连通图:各顶点之间有边联系,有向图,双路径存在叫做强连通图; (10).生成树:是无向连通图的极小连通子图,若有N个顶点,则生成树由N-1条边构成! 2、图的邻接矩阵 邻接矩阵模型 777c91a690dd8e39b180fe9da56f6eea.png 就是将图的多对多的非线性结构用矩阵的方式表示; 我们必须知道: (1).会由矩阵来恢复图; (2).第一个邻接顶点:从列开始处,第一个边 (3).下一个邻接顶点:给2个参数,第一个参数表示是谁的下一个邻接顶点,第二个表示从当前顶点开始其后的第一条边; (4). 其顶点存放在数组空间中; (5). 顶点之间的关系通过矩阵来表示边。 存储结构:
1
存储模型如下: fab20b5cf3431708a2748b2c099bd357.png 3、图的实现方法 均用C++实现;并且父类给了接口,子类继承实现即可;方便对不同的存储结构的编写。 核心方法,删除顶点: (1)、第一种方法实现
 1
以上存在数组的大量移动,效率太低;  (2)、第二种方法实现
 1
第二种方法甚好,将要删除的顶点(连边一起删除),用最后一个元素(行/列)去覆盖删除的那个即可,之间的关系不变,但是就避免了大量移动,一次覆盖就好,效率极大!!! 模型如下: 60b242b927dffb0334610a0ff34ab909.png 4、图的方法实现完整代码、测试代码、测试结果 (1)、完整代码(用的是继承,方便写其它的存储结构代码):
  1
(2)、测试代码:
 1
(3)测试结果: 2de907efbef08bc2b30d91ffd40f47b1.png 82c12890294edf273bef2cdf3a91883c.png 推荐阅读: 从零开始学习数据结构-->入门篇 从零开始学习数据结构-->链表 从零开始学习数据结构-->线性表 从零开始学习数据结构-->栈 从零开始学习数据结构-->队列 从零开始学习数据结构-->矩阵+串 从零开始学习数据结构-->哈希表 从零开始学习数据结构-->散列桶 从零开始学习数据结构-->二叉树

从零开始学习数据结构-->二叉树方法实现

从零开始学习数据结构-->线索二叉树

从零开始学习数据结构-->树、森林与二叉树的转换

从零开始学习数据结构-->大堆+小堆

从零开始学习数据结构-->AVL树之旋转算法

从零开始学习数据结构-->AVL树之插入算法

从零开始学习数据结构-->AVL树之删除算法 从零开始学习数据结构-->红黑树 认真的人 自带光芒

b8b718772121aeeb6aec9070bd98aaf3.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值