推广 热搜: 行业  机械  设备    系统  教师  经纪  参数    蒸汽 

数据结构图的知识点大全总结(包括各类常见算法都有本人自己的独特分析)

   日期:2024-11-10     移动:http://fswenzheng.xhstdz.com/mobile/quote/64237.html

图是由顶点的有穷非空集合和顶点之间边的集合组成,通常表示为:G(V,E),其G表示一个图,V是图G中顶点的集合,E是图G中边的集合。

数据结构图的知识点大全总结(包括各类常见算法都有本人自己的独特分析)

(1)在线性表中我们把数据元素叫元素,树中将数据元素叫结点,在图数据元素称之为顶点(Vertex)。

(2)线性表中可以没有数据元素,称之为空表。树中可以没有结点称之为空树。对于图,图中不能没有顶点。强调顶点集合有穷非空。

(3)线性表中,相邻的两点之间具有线性关系,树结构中,相邻两层的结点具有等次关系。而图中,任意两个顶点之间都可能有关系,顶点之间的逻辑关系用边来表示。边集可以是空的。

         无向边:若顶点vi到vj之间的边没有方向,则称这条边为无向边(edge),用无序偶对(vi,vj)来表示。

         有向边:若顶点vi到vj之间的边有方向,则称这条边为有向边,也称为弧(Arc)。用有序偶对<vi,vj>来表示,vi称为弧尾(Tail)vj称为弧头(Head)。如果图中任意两个顶点之间都是有向边,则称该图为有向图

  在图中,若不存在顶点到其自身的边,且同一条边不重复出现,则称这样的图为简单图。

   在无向图中,如果任意两个顶点之间都存在边,则称该图为无向完全图。

   在有向图中,如果任意两个顶点之间都存在方向互为相反的两条弧,则称该图为有向完全图。

有很少条边的图称为稀疏图,反之称为稠密图。

与图的边或弧相关的数叫作权(weight),这种带权的图通常称为网(Network)。

    假设有两个图G(V,{E})G1=(V1,{E1})如果V1包含于V且E1包含于E,则称G1位G的有向图。例子如下:

分别为无向图有其子图,和有向图及其子图。

对于无向图G,如果(v,v1)属于E,则称顶点v与v1互为邻接点,即v与v1相邻接

对于有向图G,如果弧<v,v1>属于E,则称顶点v邻接到v1,顶点v1邻接自顶点v。弧<v,v1>与顶点v、v1相关联,以顶点v为头的弧的数目称为v的入度(InDegree),记为ID(v),以v为尾的弧的数目称为v的出度(OutDegree),记为OD(v);顶点v的度为TD(v)=ID(v)+OD(v)。即顶点的度为此顶点的入度加上出度。

无向图G中从顶点v到顶点v1的路径(Path)是一个·顶点序列

如下图为A到D的四种不同路径:

有向图的路径对方向严格要求。

路径的长度是路径上的边或弧的数目。

 

说的概念有些多,可能脑袋有些晕了吧。我们在来整理下所有的定义与术语。

图的定义与术语总结:

按照有无方向分为无向图有向图。无向图由顶点构成,有向图由顶点构成。弧有弧头弧尾之分。

图按照边或弧的多少分为稀疏图稠密图。如果任意两个顶点之间都存在边叫完全图,有向的叫有向完全图。若无重复的边或顶点到自身的边则叫简单图

图中顶点之间有邻接点依附的概念。无向图顶点的边数叫作,有向图顶点分为入度出度

图上的边或弧上带则称为

图中顶点之间存在路径,两顶点存在路径说明是连通的,如果路径最终回到起始点则称为,当中不重复叫简单路径。若任意两顶点都是连通的,则图就是连通图。有向则称为强连通图。图中有子图,若子图极大连通则就是连通分量,有向的则称为强连通分量

无向图中连通且n个顶点n-1条边叫生成树。有向图中一顶点入度为0其余顶点入度为1的叫有向树,一个有向图由若干棵有向树构成生成森林

 

        由于图的结构比较复杂,任意两个顶点之间都可能存在联系,因此无法以数据元素在内存中的物理位置来表示元素之间的关系,也就是说,图不可能用简单的顺序存储结构来表示。而多重链表的方式,即以一个数据域和多个指针域的结点表示图中的一个顶点,尽管可以实现图结构,但是以这种结构,如果各个结点的度数相差很大,按度数最大的顶点设置结点结构会造成很多存储单元的浪费,而若按每个顶点自己的度数设计不同的顶点结构,又带来操作的不便。如何实现物理存储是个难题。下面介绍前辈们提供的五种不同的存储结构。

1 、邻接矩阵

       图的邻接矩阵存储方式使用两个数组来表示图。一个一维数组存储图中顶点信息,一个二维数组(称为邻接矩阵)存储图中的边或弧的信息。

接下来分享几个实例来学习邻接矩阵

       从这个例子我们可以清楚的知道arc[i][j]=0说明顶点vi与vj之间没有边,若arc[i][j]=1说明顶点vi与vj之间有边。由于是无向图,所以无向图的邻接矩阵是对称矩阵即vi到vj有边,那么vj到vi也有边。

       如果我们要知道图中某个顶点的度那么只要将该顶点对应的行(或列)的元素值加起来,就是该顶点的度。

下面在来看一个有向图的例子:

如果arc[i][j]=0表示vi到vj不存在弧,arc[i][j]=1表示vi到vj存在弧。

有向图讲究入度与出度,某个顶点的入度为该顶点对应的列上所有元素之和,某个顶点的出度为该顶点对应的行上的所有元素之和。该顶点入度加上出度就是该顶点的度。

下面例看一个有向网图的例子:

这里用∞表示一个不可能的极限值用来代表不存在。

下面是图的邻接矩阵的结构定义:

2、邻接表

邻接表示不错的一种图的存储结构,但是我们发现对于边数相对顶点较少的图,这种结构时存在对存储空间的极大浪费。如我们要处理像下图这样的稀疏有向图:  

除了一条弧有权值外,没有其他弧,那么这就造成了存储空间的极大浪费。

这里我们采取了邻接表的存储方式。邻接表就是把数组与链表相结合的存储方法。

邻接表处理步骤如下:

1.图中顶点用一维数组存储,另外每个数据元素还需存储指向第一个邻接点的指针,以便于查找该顶点的信息。

2.图中每个顶点的vi的所有邻接点构成一个线性表,由于邻接点的个数不定,所以用单链表存储。无向图称为顶点vi的边表,有向图则称为vi作为弧尾的出边表。

下面举个无向图的邻接表的例子:

由这个例子知道顶点表的各个结点由data域和firstedge域(指针域)两个域表示。data是数据域,存储顶点的信息,firstedge是指针域,指向边表的第一个结点,即此顶点的第一个邻接点。边表结点由adjvex和next两个域组成。adjvex是邻接点域用来存储某顶点的邻接点在顶点表中的下标,next则存储指向边表中下一个结点的指针。

若是有向图,邻接表结构同样类似,不过有向图有方向,所以有向图有邻接表与逆邻接表两种方式,看如下例子:

当然我们可以建立一个有向图的逆邻接表,即对每个顶点都建立一个以顶点vi都建立一个以vi为弧头的表,上例的逆邻接表如下:

本文地址:http://fswenzheng.xhstdz.com/quote/64237.html    物流园资讯网 http://fswenzheng.xhstdz.com/ , 查看更多

特别提示:本信息由相关用户自行提供,真实性未证实,仅供参考。请谨慎采用,风险自负。


0相关评论
相关最新动态
推荐最新动态
点击排行
网站首页  |  关于我们  |  联系方式  |  使用协议  |  版权隐私  |  网站地图  |  排名推广  |  广告服务  |  积分换礼  |  网站留言  |  RSS订阅  |  违规举报  |  鄂ICP备2020018471号