iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Java数据结构之图的基础概念和数据模型详解
  • 700
分享到

Java数据结构之图的基础概念和数据模型详解

Java数据结构 图Java 图 2022-11-13 19:11:23 700人浏览 独家记忆

Python 官方文档:入门教程 => 点击学习

摘要

目录图的实际应用图的定义及分类图的相关术语图的存储结构邻接矩阵邻接表图的实现图的api设计代码实现图的实际应用 在现实生活中,有许多应用场景会包含很多点以及点点之间的连接,而这些应用

图的实际应用

在现实生活中,有许多应用场景会包含很多点以及点点之间的连接,而这些应用场景我们都可以用即将要学习的图这种数据结构去解决。

地图:

我们生活中经常使用的地图,基本上是由城市以及连接城市的道路组成,如果我们把城市看做是一个一个的点,把道路看做是一条一条的连接,那么地图就是我们将要学习的图这种数据结构。

图的定义及分类

定义: 图是由一组顶点和一组能够将两个顶点相连的边组成的。

特殊的图:

  • 自环:即一条连接一个顶点和其自身的边;
  • 平行边:连接同一对顶点的两条边;

图的分类:

按照连接两个顶点的边的不同,可以把图分为以下两种:

无向图:边仅仅连接两个顶点,没有其他含义;

有向图:边不仅连接两个顶点,并且具有方向;

图的相关术语

相邻顶点:

当两个顶点通过一条边相连时,我们称这两个顶点是相邻的,并且称这条边依附于这两个顶点。

度:

某个顶点的度就是依附于该顶点的边的个数

子图:

是一幅图的所有边的子集(包含这些边依附的顶点)组成的图;

路径:

是由边顺序连接的一系列的顶点组成

环:

是一条至少含有一条边且终点和起点相同的路径

连通图:

如果图中任意一个顶点都存在一条路径到达另外一个顶点,那么这幅图就称之为连通图

连通子图:

一个非连通图由若干连通的部分组成,每一个连通的部分都可以称为该图的连通子图

图的存储结构

要表示一幅图,只需要表示清楚以下两部分内容即可:

  • 图中所有的顶点;
  • 所有连接顶点的边;

常见的图的存储结构有两种:邻接矩阵和邻接表。

邻接矩阵

  • 使用一个V*V的二维数组int[V][V] adj,把索引的值看做是顶点;
  • 如果顶点v和顶点w相连,我们只需要将adj[v][w]和adj[w][v]的值设置为1,否则设置为0即可。

很明显,邻接矩阵这种存储方式的空间复杂度是V^2的,如果我们处理的问题规模比较大的话,内存空间极有可能不够用。

邻接表

1.使用一个大小为V的数组 Queue[V] adj,把索引看做是顶点;

2.每个索引处adj[v]存储了一个队列,该队列中存储的是所有与该顶点相邻的其他顶点。

很明显,邻接表的空间并不是是线性级别的,所以后面我们一直采用邻接表这种存储形式来表示图。

图的实现

下面通过代码实现一个无向图。

图的API设计

类名Graph
成员变量1.private final int V: 记录顶点数量2.private int E: 记录边数量3.private Queue[] adj: 邻接表
构造方法Graph(int V):创建一个包含V个顶点但不包含边的图
成员方法1.public int V():获取图中顶点的数量2.public int E():获取图中边的数量3.public void addEdge(int v,int w):向图中添加一条边 v-w4.public Queue adj(int v):获取和顶点v相邻的所有顶点

代码实现


public class Graph {
    //顶点数目
    private final int V;
    //边的数目
    private int E;
    //邻接表,队列的形式
    private Queue<Integer>[] adj;

    public Graph(int V) {
        // 初始化顶点数量
        this.V = V;
        //初始化边的数量
        this.E = 0;
        //初始化邻接表
        this.adj = new Queue[V];
        //初始化邻接表中的空队列
        for (int i = 0; i < adj.length; i++) {
            adj[i] = new ArrayDeque<>();
        }
    }

    public void addEdge(int v, int w) {
        //把w添加到v的链表中,这样顶点v就多了一个相邻点w
        adj[v].add(w);
        //把v添加到w的链表中,这样顶点w就多了一个相邻点v
        adj[w].add(v);
        //边的数目自增1
        E++;
    }

    //获取顶点数目
    public int V() {
        return V;
    }

    //获取边的数目
    public int E(){
        return E;
    }

    //获取和顶点v相邻的所有顶点
    public Queue<Integer> adj(int v) {
        return adj[v];
    }
}

数组adj的索引表示顶点。

到此这篇关于Java数据结构之图的基础概念和数据模型详解的文章就介绍到这了,更多相关Java数据结构 图内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: Java数据结构之图的基础概念和数据模型详解

本文链接: https://www.lsjlt.com/news/170517.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Java数据结构之图的基础概念和数据模型详解
    目录图的实际应用图的定义及分类图的相关术语图的存储结构邻接矩阵邻接表图的实现图的API设计代码实现图的实际应用 在现实生活中,有许多应用场景会包含很多点以及点点之间的连接,而这些应用...
    99+
    2022-11-13
    Java数据结构 图 Java 图
  • Python 数据结构之树的概念详解
    数据结构树简介 一、树简介 树(Tree)是一种抽象的数据结构,是一个数据的集合,集合中的数据组成了一个树状结构。例如上图,看起来像一棵倒挂的树,根朝上叶朝下。 树是由n(n>...
    99+
    2022-11-12
  • Python基础之数据结构详解
    目录一、列表1.1 列表更新元素1.2 列表增加元素1.3 列表删除元素1.4 列表的其他操作二、元组2.1 删除元组2.2 元组的其他操作三、字典3.1 字典删除元素3.2 字典的...
    99+
    2022-11-12
  • Java数据结构之链表的概念及结构
    目录1、链表的概念2、结点3、链表的使用场景4、链表分类和常用结构5、与顺序表的比较1、链表的概念 概念:链表是一种物理存储结构上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链...
    99+
    2023-05-14
    Java 数据结构链表概念结构 数据结构链表概念 数据结构链表结构
  • 数据结构与算法之了解基本概念
    本篇内容主要讲解“数据结构与算法之了解基本概念”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“数据结构与算法之了解基本概念”吧!前言数据结构与算法是程序员内功体现...
    99+
    2022-10-19
  • Java 数据结构之堆的概念与应用
    目录什么是堆堆的类型小根堆大根堆堆的基本操作:创建堆堆的时间复杂度和空间复杂度堆的应用-优先级队列概念优先级队列基本操作入优先级队列出优先级队列首元素java的优先级队列堆的常见面试...
    99+
    2022-11-12
  • java基础详解之数据类型知识点总结
    目录一、基本数据类型1.1 整形1.1.1 int1.1.2 长整形:long1.1.3 短整形:short1.2 浮点型1.2.1 双精度浮点型:double1.2.2 单精度浮点...
    99+
    2022-11-12
  • Java数据结构之链表的概念及结构是什么
    今天小编给大家分享一下Java数据结构之链表的概念及结构是什么的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。1、 链表的概念...
    99+
    2023-07-05
  • Java基础之详解基本数据类型的使用
    一、整型 主要扩展一下不同进制的整型 二进制、八进制、十进制、十六进制 * 二进制 : 0B(数字零+B) 0b(数字零+b) * 八进制 :0(数字零开头) * 十进制 :正常写...
    99+
    2022-11-12
  • java数据结构之栈的详解
    目录一、栈1.栈的应用1.1括号匹配1.2后缀表达式1.3用栈实现队列1.4最小栈1.5栈的压入和弹出序列总结一、栈 栈的特性就是先进后出,常用方法是入栈(push()),出栈(po...
    99+
    2022-11-12
  • Python数据结构之图的存储结构详解
    一、图的定义 图是一种比树更复杂的一种数据结构,在图结构中,结点之间的关系是任意的,任意两个元素之间都可能相关,因此,它的应用极广。图中的数据元素通常被称为顶点 ( V e r t ...
    99+
    2022-11-12
  • 三大关系型数据库事务详解之一:基本概念
    一、基本概念   假设用户A要从他的账户里面给B转账1000元,那么就需要两步来实现,首先从A的账号减去1000元,再给B账号加1000元。这两个步骤中,任何一步都不能少或者出错,这两步要么都得到成功操作完成,要么什么都不做,中途...
    99+
    2020-09-12
    三大关系型数据库事务详解之一:基本概念
  • Java数据结构之图的领接矩阵详解
    目录1.图的领接矩阵(Adjacency Matrix)存储结构2.图的接口类3.图的类型,用枚举类表示4.图的领接矩阵描述测试类结果1.图的领接矩阵(Adjacency Matri...
    99+
    2022-11-12
  • Python基础数据类型中tuple元组的概念和用法
    本篇内容主要讲解“Python基础数据类型中tuple元组的概念和用法”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Python基础数据类型中tuple元组的概念和用法”吧!目录元组简单介绍声明...
    99+
    2023-06-20
  • Java数据结构之栈的线性结构详解
    目录一:栈二:栈的实现三:栈的测试四:栈的应用(回文序列的判断)总结一:栈 栈是限制插入和删除只能在一个位置上进行的表,此位置就是表的末端,叫作栈顶。 栈的基本操作分为push(入...
    99+
    2022-11-12
  • Java数据结构之LinkedList的用法详解
    链表(Linked list)是一种常见的基础数据结构,是一种线性表,但是并不会按线性的顺序存储数据,而是在每一个节点里存到下一个节点的地址。链表可分为单向链表和双向链表。 一个单向...
    99+
    2023-05-19
    Java数据结构LinkedList使用 Java数据结构LinkedList Java LinkedList
  • Java数据结构之图的两种搜索算法详解
    目录前言深度优先搜索算法API设计代码实现广度优先搜素算法API设计代码实现案例应用前言 在很多情况下,我们需要遍历图,得到图的一些性质,例如,找出图中与指定的顶点相连的所有顶点,或...
    99+
    2022-11-13
    Java数据结构 图搜索 Java 图 搜索算法 Java 数据结构 图
  • Java数据结构之图的路径查找算法详解
    目录前言算法详解实现API设计代码实现前言 在实际生活中,地图是我们经常使用的一种工具,通常我们会用它进行导航,输入一个出发城市,输入一个目的地 城市,就可以把路线规划好,而在规划好...
    99+
    2022-11-13
    Java图路径查找算法 Java 图 路径查找 Java数据结构 图
  • Java数据结构之有向图的拓扑排序详解
    目录前言拓扑排序介绍检测有向图中的环实现思路API设计代码实现基于深度优先的顶点排序实现思路API设计代码实现拓扑排序API设计代码实现测试验证前言 在现实生活中,我们经常会同一时间...
    99+
    2022-11-13
    Java有向图 拓扑排序 Java 有向图 Java 拓扑排序
  • Java数据结构中图的进阶详解
    目录有向图有向图API设计有向图的实现拓扑排序拓扑排序图解检测有向图中的环检测有向环的API设计检测有向环实现代码基于深度优先的顶点排序顶点排序API设计顶点排序实现代码:有向图 有...
    99+
    2022-11-13
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作