算法-数据结构-图-邻接表构建

news/2025/2/26 12:58:29/

邻接表的基本概念

  1. 顶点(Vertex)

    • 图中的每个顶点用一个节点表示。

    • 每个顶点存储一个链表或数组,用于记录与该顶点直接相连的其他顶点。

  2. 边(Edge)

    • 如果顶点 A 和顶点 B 之间有一条边,那么在 A 的邻接表中会记录 B,同时在 B 的邻接表中也会记录 A(如果是无向图)。

  3. 存储方式

    • 邻接表可以用多种方式实现,比如:

      • 链表:每个顶点对应一个链表,链表中存储与该顶点相连的其他顶点。

      • 动态数组:每个顶点对应一个动态数组(如 ArrayList),数组中存储与该顶点相连的其他顶点。

      • 哈希表:每个顶点对应一个哈希表,键是相邻顶点,值可以是边的权重(适用于带权图)。

  4. 代码实现

顶点定义

public class Node {//节点位置int data;//下一个节点Node nextNode;//节点默认空值Node() {};//节点变量Node(int val){data=val;}//节点初始化Node(int val,Node node){data=val;nextNode=node;}
}

邻接表创建与打印

import java.util.ArrayList;
import java.util.List;public class GraphTest {//创建领接表//顶点 A B C D E F//边 AB AC BD DF EFpublic static void creatGraph(){//创建顶点List<Character> vList=new ArrayList<>();for(int i=0;i<6;i++){vList.add((char)('A'+i));}//创建空列表存储空节点,表示相互领接关系List<Node> vNodeList=new ArrayList<>();for(int i=0;i<vList.size();i++){vNodeList.add(null);}//插入领接关系//A->B 0-1insert(0,1,vNodeList);//A->C 0-2insert(0,2,vNodeList);//B->D 1-3insert(1,3,vNodeList);//D->F 3-5insert(3,5,vNodeList);//E->F 4-5insert(4,5,vNodeList);//领接表打印for(int i=0;i<vNodeList.size();i++){System.out.print(vList.get(i));System.out.print("-->");Node curNode=vNodeList.get(i);while (curNode!=null){System.out.print(vList.get(curNode.data));System.out.print(" ");System.out.print(curNode.data);System.out.print(" ");curNode=curNode.nextNode;}System.out.println();}}//头插入法插入相互领接数据//v1为顶点位置,v2为相互领接顶点的位置public static void insert(int v1,int v2,List<Node> list){//创建一个节点Node newNode=new Node(v2);//新的节点指向列表里的节点newNode.nextNode=list.get(v1);//存储当前节点在列表里list.set(v1,newNode);}public static void main(String[] args) {creatGraph();}
}


http://www.ppmy.cn/news/1575009.html

相关文章

【Vscode 使用】集合1

一、使用make工具管理工程 windows下&#xff0c;下载mingw64&#xff0c;配置好mingw64\bin 为 Win10系统全局变量后。 在mingw64/bin目录下找到mingw32-make.exe工具。复制一份改名为&#xff1a;make.exe&#xff0c;没错&#xff0c;就是那么简单&#xff0c;mingw64自带m…

zswap 数据结构维护解析

zswap 数据结构维护解析 zswap 是 Linux 内核中的一个前端压缩交换&#xff08;swap&#xff09;机制&#xff0c;它在内存中维护一个 zpool 来存储被压缩的页面&#xff0c;以减少磁盘 I/O 并提高性能。以下是 zswap 维护加解压相关数据结构的核心解析。 1. zswap 的核心数据…

0084.基于springboot+vue的医患档案管理系统

一、系统说明 基于springbootvue的医患档案管理系统,系统功能齐全, 代码简洁易懂&#xff0c;适合小白学编程。 二、系统架构 前端&#xff1a;vue|elementui 后端&#xff1a;springboot| mybatis 环境&#xff1a;jdk1.8 | mysql8.0 | maven 三、相关功能介绍 1.登录、注…

小程序高度问题背景scss

不同的机型&#xff0c;他的比例啥的都会不一样&#xff0c;同样的rpx也会有不同的效果。所以这里选择了取消高度。 <view class"box-border" :style"{padding-top: ${navHeight}px,}"><!-- 已登录 --><view v-if"userStore.userInfo&…

排序算法归类整理对比

以下是常见排序算法的详细分类和解析&#xff0c;涵盖原理、时间复杂度及适用场景&#xff1a; 一、比较排序算法 1. 快速排序&#xff08;Quick Sort&#xff09; 原理&#xff1a;分治策略&#xff0c;选取基准元素&#xff08;pivot&#xff09;&#xff0c;将数组分为小于…

django校园互助平台~源码

博主介绍&#xff1a;✌程序猿徐师兄、8年大厂程序员经历。全网粉丝15w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;…

elkan K-Means算法

简介 在计算向量相似度时,常用 近似最近邻(ANN, Approximate Nearest Neighbor)算法 来加速查询向量的搜索。其中,较为知名的 ANN 算法包括 HNSW、Ivfflat、Ivfpq 和 Ivfsq。在 IVF(倒排索引,Inverted File Index) 类型的算法中,Elkan K-Means 算法是较为经典的方法之…

AI知识架构之数据采集

数据采集 数据格式: 结构化数据:以固定格式和结构存储,如数据库中的表以及 Excel 表格,易于查询和分析。半结构化数据:有一定结构但不如结构化数据严格,XML 常用于数据交换,JSON 在 Web 应用中广泛用于数据传输和存储。非结构化数据:无预定义结构,文本、图像、音频和视…