【数据结构】图

在计算机程序设计中,图结构也是一种非常常见的数据结构。

研究图结构的主要目的就是为了研究事物之间的关系(顶点代表事物,边代表两个事物之间的关系)。

图的现实案例:

程序就是现实的一种模拟、一种抽象。

图可以用来模拟很多现实的数据结构。比如:

  1. 人与人之间的关系网:每个人都是一个顶点,人与人之间的关系就形成一条边。
  2. 地铁图:每个站点都是一个顶点,站点与站点之间的线路就形成一条边。

图的简介:

图由顶点和边构成。通常用 V(Vertex)表示顶点,用 E(Edge)表示边。
请添加图片描述

顶点:

顶点就是图中的一个节点。比如:0 是一个顶点,1 是一个顶点。

由一条边连接在一起的顶点称为相邻顶点。比如:0 - 1 就是相邻顶点,0 - 2 不是相邻顶点。

度:

一个顶点的度就是其相邻顶点的数量。比如:顶点 0 有两个相邻顶点,那么顶点 0 的度就是 2。

边:

边是顶点和顶点之间的连线。比如:0 - 1 有一条边,0 - 2 没有边。

边可以是有向的,也可使是无向的。比如:A - B 表示无向,A 可以到 B,B 也可以到 A;A -> B 表示有向,A 可以到 B,但 B 不可以到 A。

路径:

路径是顶点 v1、v2…vn 的一个连续序列。比如:0 - 1 - 5 - 9 就是一条路径。

如果一条路径中不包含重复的顶点,那么它就是简单路径。比如:0 - 1 - 5 - 9 就是一条简单路径,0 - 1 - 5 - 2 - 4 - 5 - 9 就不是一条简单路径。

如果一条路径的第一个顶点和最后一个顶点相同,那么它就是回路。比如:0 - 1 - 5 - 6 - 3 - 0。

有向图和无向图:

如果图中所有的边都没有方向,那么这个图就是无向图。

如果图中的边是有方向的,那么这个图就是有向图。

无权图和带权图:

权:权重,是希望表示的任何数据。

如果图中的边没有携带权重,那么这个图就是无权图。比如:不能说 4 - 9 的边比 0 - 1 的边更远或者所需要花费的时间更长。

如果图中的边有一定的权重,那么这个图就是带权图。

图的表示:

有两种常见的表示图的方法:邻接矩阵和邻接表。

邻接矩阵:

请添加图片描述

矩阵在程序中就是一个数组。

可以用一个二维数组来表示邻接矩阵。让每个顶点和一个整数相关联,该整数作为数组的下标值。通过 二维数组[][] 的值来表示边。比如:上图中,0 就是 A 在数组中的下标 ,2 就是 C 在数组中的下标,通过 二维数组[0]2] 就得到了值 1 ,表示 A - C 之间是有边的,通过 二维数组[2][0] 就得到了值 1 ,表示 C - A 之间是也有边的。

邻接矩阵的优点:可以很好的表示有向图、无向图和有权图和带权图(只需要改变二维数组中的值即可)。

邻接矩阵的缺点:如果顶点与顶点之间的边很少(稀疏图),那么邻接矩阵中将会存在大量的 0 ,这意味着浪费了计算机的存储空间来表示根本不存在的边。

邻接表:

请添加图片描述

邻接表由图中每个顶点以及和顶点相邻的顶点列表组成。比如:第一行表示顶点 A 和与它相邻的顶点 B、C、D。

邻接表的优点:邻接表的表示方式和存取方式都比较简单。

邻接表的缺点:邻接表计算出度是比较简单的;但是如果邻接表是有向的,那么计算入度则非常麻烦(必须构造一个逆邻接表,才能有效地计算入度)。

出度:指向别人的数量。
入度:指向自己的数量。

创建图类:

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值