iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Java用邻接表存储图的示例代码
  • 455
分享到

Java用邻接表存储图的示例代码

2024-04-02 19:04:59 455人浏览 八月长安

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

摘要

目录一、点睛1.无向图2.无向图的链接表3.说明4.无向图二、邻接表的数据结构1.节点2.邻接点三、算法步骤四、实现五、测试一、点睛 邻接表是图的一种链式存储方法,其数据结构包括两部

一、点睛

邻接表是图的一种链式存储方法,其数据结构包括两部分:节点和邻接点。

用邻接表可以表示无向图,有向图和网。在此用无向图进行说明。

1.无向图

2.无向图的链接表

3.说明

节点 a 的邻接点是节点 b、d,其邻接点的存储下标为1、3,按照头插法(逆序)将其放入节点 a 后面的单链表中。

节点 b 的邻接点是节点 a、c、d,其邻接点的存储下标为0、2、3,按照头插法(逆序)将其放入节点 b 后面的单链表中。

节点 c 的邻接点是节点 b、d,其邻接点的存储下标为1、3,按照头插法(逆序)将其放入节点 c 后面的单链表中。

节点 d 的邻接点是节点 a、b、c,其邻接点的存储下标为0、1、2,按照头插法(逆序)将其放入节点 d 后面的单链表中。

4.无向图

邻接表的特点如下 如果无向图中有 n 个节点、e 条边,则节点表中有 n 个节点,邻节点表有 2e 个节点。

节点的度为该节点后面单链表中的节点数。

二、邻接表的数据结构

1.节点

包括节点信息 data 和指向第 1 个邻接点的指针 first。

2.邻接点

包括该邻接点的存储下标 v 和指向下一个邻接点的指针 next,如果是网的邻接点,则还需增加一个权值域 w,如下图所示。

三、算法步骤

1 输入节点数和边数。

2 依次输入节点信息,将其存储到节点数组 Vex[] 的 data 域中,将 Vex[] first 域置空。

3 依次输入每条边依附的两个节点,如果是网,则还需要输入该边的权值。

如果是无向图,则输入 a b,查询节点 a、b 在节点数组 Vex[] 中存储下标 i、j,创建一个新的邻接点 s,让 s.v = j;s.next=null;然后将节点 s 插入第 i 个节点的第 1 个邻接点之前(头插法)。在无向图中,从节点 a 到节点 b 有边,从节点 b 到节点 a 也有边,因此还需要创建一个新的邻接点 s2,让 s2.v = i;s2.next=null;然后让 s2 节点插入第 j 个节点的第 1 个邻接点之前(头插法)。

如果是无向图,则输入 a b,查询节点 a、b 在节点数组 Vex[] 中存储下标 i、j,创建一个新的邻接点 s,让 s.v = j;s.next=null;然后将节点 s 插入第 i 个节点的第 1 个邻接点之前(头插法)。

如果是无向网或有向网,则和无向图或有向图的处理方式一样,只是邻节点多了一个权值域。

四、实现

package graph;
 
import java.util.Scanner;
 
public class CreateALGraph {
    static final int MaxVnum = 100;  // 顶点数最大值
 
    public static void main(String[] args) {
        ALGraph G = new ALGraph();
        for (int i = 0; i < G.Vex.length; i++) {
            G.Vex[i] = new Vexnode();
        }
        CreateALGraph(G); // 创建有向图邻接表
        printg(G); // 输出邻接表
    }
 
    static int locatevex(ALGraph G, char x) {
        for (int i = 0; i < G.vexnum; i++) // 查找顶点信息的下标
            if (x == G.Vex[i].data)
                return i;
        return -1; // 没找到
    }
 
    // 插入一条边
    static void insertedge(ALGraph G, int i, int j) {
        AdjNode s = new AdjNode();
        s.v = j;
        s.next = G.Vex[i].first;
        G.Vex[i].first = s;
    }
 
    // 输出邻接表
    static void printg(ALGraph G) {
        System.out.println("----------邻接表如下:----------");
 
        for (int i = 0; i < G.vexnum; i++) {
            AdjNode t = G.Vex[i].first;
            System.out.print(G.Vex[i].data + ":  ");
            while (t != null) {
                System.out.print("[" + t.v + "]\t");
                t = t.next;
            }
            System.out.println();
        }
    }
 
    // 创建有向图邻接表
    static void CreateALGraph(ALGraph G) {
        int i, j;
        char u, v;
 
        System.out.println("请输入顶点数和边数:");
        Scanner scanner = new Scanner(System.in);
        G.vexnum = scanner.nextInt();
        G.edgenum = scanner.nextInt();
        System.out.println("请输入顶点信息:");
 
        for (i = 0; i < G.vexnum; i++)//输入顶点信息,存入顶点信息数组
            G.Vex[i].data = scanner.next().charAt(0);
        for (i = 0; i < G.vexnum; i++)
            G.Vex[i].first = null;
        System.out.println("请依次输入每条边的两个顶点u,v");
 
        while (G.edgenum-- > 0) {
            u = scanner.next().charAt(0);
            v = scanner.next().charAt(0);
            i = locatevex(G, u); // 查找顶点 u 的存储下标
            j = locatevex(G, v); // 查找顶点 v 的存储下标
            if (i != -1 && j != -1)
                insertedge(G, i, j);
            else {
                System.out.println("输入顶点信息错!请重新输入!");
                G.edgenum++; // 本次输入不算
            }
        }
    }
}
 
// 定义邻接点类型
class AdjNode {
    int v; // 邻接点下标
    AdjNode next; // 指向下一个邻接点
}
 
// 定义顶点类型
class VexNode {
    char data; // VexType为顶点的数据类型,根据需要定义
    AdjNode first; // 指向第一个邻接点
}
 
// 定义邻接表类型
class ALGraph {
    VexNode Vex[] = new VexNode[CreateALGraph.MaxVnum];
    int vexnum; // 顶点数
    int edgenum; // 边数
}

五、测试

白色为输出,绿色为输入

以上就是Java用邻接表存储图的示例代码的详细内容,更多关于Java邻接表存储图的资料请关注编程网其它相关文章!

--结束END--

本文标题: Java用邻接表存储图的示例代码

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

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

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

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

下载Word文档
猜你喜欢
  • Java用邻接表存储图的示例代码
    目录一、点睛1.无向图2.无向图的链接表3.说明4.无向图二、邻接表的数据结构1.节点2.邻接点三、算法步骤四、实现五、测试一、点睛 邻接表是图的一种链式存储方法,其数据结构包括两部...
    99+
    2024-04-02
  • Java用邻接矩阵存储图的示例代码
    目录一、点睛1.无向图的邻接矩阵2.有向图的邻接矩阵3.网的邻接矩阵二、算法步骤三、实现四、测试一、点睛 邻接矩阵通常采用一个一维数组存储图中节点的信息,采用一个二维数组存储图中节点...
    99+
    2024-04-02
  • Java怎么用邻接表存储图
    本篇内容主要讲解“Java怎么用邻接表存储图”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java怎么用邻接表存储图”吧!一、点睛邻接表是图的一种链式存储方法,其数据结构包括两部分:节点和邻接点...
    99+
    2023-07-02
  • Java语言描述存储结构与邻接矩阵代码示例
    存储结构要存储一个图,我们知道图既有结点,又有边,对于有权图来说,每条边上还带有权值。常用的图的存储结构主要有以下二种:邻接矩阵邻接表邻接矩阵我们知道,要表示结点,我们可以用一个一维数组来表示,然而对于结点和结点之间的关系,则无法简单地用一...
    99+
    2023-05-30
    java 算法 邻接矩阵
  • Java如何用邻接矩阵存储图
    这篇“Java如何用邻接矩阵存储图”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Java如何用邻接矩阵存储图”文章吧。一、点...
    99+
    2023-07-02
  • 图的存储:十字链表,邻接多重表
    1.十字链表存储有向图 1.存储方式 分为顶点结点和弧结点两种结构体 顶点结点使用数组顺序存储,结构体包括:数据域,作为顶点弧头的第一条弧,作为顶点弧尾的第一条弧。 弧结点,结构体包括:弧头相同的下一条弧(指向当前结点的弧),弧尾相...
    99+
    2023-08-30
    数据结构 算法
  • Java中树的存储结构实现示例代码
    一、树树与线性表、栈、队列等线性结构不同,树是一种非线性结构。一棵树只有一个根节点,如果一棵树有了多个根节点,那它已经不再是一棵树了,而是多棵树的集合,也被称为森林。二、树的父节点表示法树中除根节点之外每个节点都有一个父节点,为了记录树中节...
    99+
    2023-05-31
    java 存储结构
  • 邻接表无向图的Java语言实现完整源码
    邻接表无向图的介绍邻接表无向图是指通过邻接表表示的无向图。上面的图G1包含了”A,B,C,D,E,F,G”共7个顶点,而且包含了”(A,C),(A,D),(A,F),(B,C),(C,D),(E,G),(F,G)”共7条边。上图右边的矩阵是...
    99+
    2023-05-30
    java 邻接表 无向图
  • Java编程如何实现邻接矩阵表示稠密图
    这篇文章主要介绍了Java编程如何实现邻接矩阵表示稠密图,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。我们知道,要表示结点,我们可以用一个一维数组来表示,然而对于结点和结点之...
    99+
    2023-05-30
    java
  • java编程无向图结构的存储及DFS操作代码的示例分析
    这篇文章将为大家详细讲解有关java编程无向图结构的存储及DFS操作代码的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。图的概念图是算法中是树的拓展,树是从上向下的数据结构,结点都有一个父结点(根...
    99+
    2023-05-30
    java dfs
  • Python实现K-近邻算法的示例代码
    目录一、介绍二、k-近邻算法的步骤三、Python 实现四、约会网站配对效果判定五、手写数字识别六、算法优缺点优点缺点一、介绍 k-近邻算法(K-Nearest Neighbour ...
    99+
    2024-04-02
  • java后台接收app上传的图片的示例代码
    整理文档,搜刮出一个java后台接受app上传的图片的示例代码,稍微整理精简一下做下分享package com.sujinabo.file;import java.io.File;import java.io.FileOutputStrea...
    99+
    2023-05-31
    java app 上传图片
  • Java实现双链表的示例代码
    目录一、双向链表是什么二、具体方法实现定义结点下标访问异常获取链表长度打印链表清空链表头插法尾插法指定位置插入查找元素删除第一次出现的关键字删除所有值为key的节点三、完整代码一、双...
    99+
    2024-04-02
  • Java利用Easyexcel导出excel表格的示例代码
    目录1.导入 EasyExcel Maven包2.配置3.输出Excel到前端1.导入 EasyExcel Maven包 <!--easyexcel 导出excel依赖--&g...
    99+
    2024-04-02
  • java 生成文字图片的示例代码
    本文主要介绍了java 生成文字图片的示例代码,分享给大家,具体如下:import java.awt.Color; import java.awt.Font; import java.awt.FontMetrics; import java...
    99+
    2023-05-31
    java 生成文字图片 ava
  • mybatis调用存储过程的实例代码
    一、提出需求  查询得到男性或女性的数量, 如果传入的是0就女性否则是男性二、准备数据库表和存储过程 create table p_user( id int primary key auto_increment, name va...
    99+
    2023-05-31
    mybatis 存储过程
  • Java 获取网站图片的示例代码
    目录前提一、新建Maven项目,导入Jsoup环境依赖二、代码编写心得:前提 最近我的的朋友浏览一些网站,看到好看的图片,问我有没有办法不用手动一张一张保存图片! 我说用Jsoup...
    99+
    2024-04-02
  • Java读取数据库表的示例代码
    目录Java读取数据库表新手引导LoggerConnectionResultSetResultSet中next()方法name和commentJava读取数据库表 package c...
    99+
    2023-05-18
    Java读取数据库表 Java数据库表
  • OpenCV实战之图像拼接的示例代码
    目录背景实现步骤一、读取文件二、单应性矩阵计算三、图像拼接总结背景 图像拼接可以应用到手机中的全景拍摄,也就是将多张图片根据关联信息拼成一张图片; 实现步骤 1、读文件并缩放图片大小...
    99+
    2024-04-02
  • Highcharts 图表中图例显示状态存储的功能设计详解
    目录需求背景需求方案方案一方案二方案三代码实现需求背景 公司前端使用 Highcharts 构建图表,图表的图例支持点击显示或隐藏相应的指标。现在有需求后端需要存储用户在前端点击后...
    99+
    2023-03-14
    Highcharts 显示状态存储 Highcharts 图表图例
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作