当前位置: 首页 > news >正文

【数据结构】8——图3,十字链表,邻接多重表

数据结构8——图3,十字链表,邻接多重表


文章目录

  • 数据结构8——图3,十字链表,邻接多重表
  • 前言
  • 一、十字链表
    • 结构
      • 例子
    • 复杂例子
  • 二、邻接多重表(Adjacency Multilist)
    • 例子


前言

除了之前的邻接矩阵和邻接表

邻接表不唯一,在有向图中只记录出度

在这里插入图片描述

逆邻接表记录入度


一、十字链表

表示稀疏有向图
结合了邻接表和逆邻接表的思想
获取顶点的出边(从该顶点出发的边)和入边(指向该顶点的边)

  • 通过为每个顶点维护两个链表来实现:一个链表用于存储从该顶点出发的所有边(出边),另一个链表用于存储到达该顶点的所有边(入边)。

结构

十字链表中的每个节点对应图中的一条边

  • 顶点节点:包含顶点信息和两个指针。一个指针指向该顶点的第一个出边节点(如果有的话),另一个指针指向第一个入边节点(通过某个其他顶点指向该顶点的边)的表头节点(这通常是一个哑节点或哨兵节点,用于简化插入和删除操作)。

Data(数据域):存储顶点信息。
First In(第一入边):指向该顶点的第一条入边。
First Out(第一出边):指向该顶点的第一条出边。

  • 边节点:包含边的信息(如权重)、一个指向起始顶点节点的指针、一个指向下一条出边节点的指针(在同一起始顶点下),以及一个指向下一条入边节点的指针(这些入边都指向同一个终点顶点,但它们可能来自不同的起始顶点)。

Tail Vertex(弧尾):表示边的起点。
Head Vertex(弧头):表示边的终点。
Head Link(头链域):指向与当前弧头相同的下一个节点(指向同一个终点的下一条边)。
Tail Link(尾链域):指向与当前弧尾相同的下一个节点(从同一个起点出发的下一条边)。
Info(信息域):存储该边的相关信息,例如权重。

例子

考虑一个简单的有向图,有以下顶点和边:
顶点:A, B, C
边:A -> B, A -> C, B -> C

顶点表:
A:First Out -> A -> B,First In -> None
B:First Out -> B -> C,First In -> A -> B
C:First Out -> None,First In -> A -> C

边节点:
A -> B:
Tail Vertex: A
Head Vertex: B
Tail Link: 指向下一条从 A 出发的边 A -> C
Head Link: 指向下一条指向 B 的边 None
A -> C:
Tail Vertex: A
Head Vertex: C
Tail Link: None
Head Link: 指向下一条指向 C 的边 B -> C
B -> C:
Tail Vertex: B
Head Vertex: C
Tail Link: None
Head Link: None

Vertex A:Out: A -> B, A -> CIn: 
Vertex B:Out: B -> CIn: A -> B
Vertex C:Out: In: A -> C, B -> C

复杂例子

顶点:A, B, C, D, E
边:
A -> B
A -> C
A -> D
B -> C
B -> E
C -> D
C -> E
D -> E

上图,按照上面简单例子的思路
先;列顶点,再列边,然后连线

在这里插入图片描述

二、邻接多重表(Adjacency Multilist)

每条边只存储一次,但是它会被链接到两个顶点的链表中,这两个顶点是边的两个端点。

  • 把边的两个顶点存放在边表结点中,所有依附于同一个顶点的边串联在同一链表中。由于每条边依附于两个顶点,则每个边表结点同时链接在两个链表中。

顶点表:存储图中的顶点信息,每个顶点元素包含两个域:
data域:用于存放与顶点相关的信息,如顶点名称或编号。
firstedge域(或类似指针):指向依附于该顶点的第一条边在边表中的节点。

边表:存储图中边的信息,每个边表节点包含多个域,常见的几个域包括:
mark:标志域,用于标记该边是否被访问过或进行过其他特定操作。
ivex和jvex:分别存放该边两个顶点在顶点表中的位置(即下标)。
info:信息域,对于带权图,可以存放边的权值;对于无向图,此域可省略。
ilink和jlink:分别指向下一条依附于顶点ivex和jvex的边在边表中的节点。

例子

考虑一个简单的无向图,包含4个顶点和5条边:
顶点:A, B, C, D
边:
A-B
A-C
B-C
B-D
C-D

  1. 创建顶点节点
    首先,为每个顶点创建一个顶点节点,每个节点包含一个指向其邻接边链表的指针。

顶点节点 A
顶点标识: A
边链表头指针: 指向A的邻接边链表的头节点
.

顶点节点 B
顶点标识: B
边链表头指针: 指向B的邻接边链表的头节点
.
顶点节点 C
顶点标识: C
边链表头指针: 指向C的邻接边链表的头节点
.
顶点节点 D
顶点标识: D
边链表头指针: 指向D的邻接边链表的头节点

  1. 创建边节点
    为每条边创建一个边节点,每个边节点包含以下信息:
    目标顶点: 目标顶点的标识或引用
    边的权重(如果有)
    下一个边节点的指针: 指向链表中的下一个边节点

边节点 A-B
目标顶点: B
边的权重: 无
下一个边节点的指针: null(这是A的链表中的第一个边节点)
.
边节点 A-C
目标顶点: C
边的权重: 无
下一个边节点的指针: null(这是A的链表中的第二个边节点)
.
边节点 B-C
目标顶点: C
边的权重: 无
下一个边节点的指针: null(这是B的链表中的第一个边节点)
.
边节点 B-D
目标顶点: D
边的权重: 无
下一个边节点的指针: null(这是B的链表中的第二个边节点)
.
边节点 C-D
目标顶点: D
边的权重: 无
下一个边节点的指针: null(这是C的链表中的第一个边节点)

3:. 更新邻接表

顶点 A:
将边节点 A-B 插入到A的邻接边链表中。
将边节点 A-C 插入到A的邻接边链表中。
链表顺序为 A-B -> A-C。

顶点 B:
将边节点 B-C 插入到B的邻接边链表中。
将边节点 B-D 插入到B的邻接边链表中。
链表顺序为 B-C -> B-D。

顶点 C:
将边节点 C-D 插入到C的邻接边链表中。
需要将边节点 A-C 插入到C的邻接边链表中。
链表顺序为 C-D -> A-C。

顶点 D:
D的链表为空,因为D没有指向其他节点的边(在无向图中,D的边已经在其他节点的链表中表示)。

  1. 完整的邻接多重表结构

顶点 A
边链表: A-B -> A-C
顶点 B
边链表: B-C -> B-D
顶点 C
边链表: C-D -> A-C
顶点 D
边链表: 空

复杂的,上图,

顶点:A, B, C, D, E, F
边:
A-B
A-C
B-C
B-D
C-E
D-E
D-F
E-F
A-F

在这里插入图片描述
重复的边不再建立节点,而是连接到之前的那个节点上

相关文章:

【数据结构】8——图3,十字链表,邻接多重表

数据结构8——图3,十字链表,邻接多重表 文章目录 数据结构8——图3,十字链表,邻接多重表前言一、十字链表结构例子 复杂例子 二、邻接多重表(Adjacency Multilist)例子 前言 除了之前的邻接矩阵和邻接表 …...

eth-trunk 笔记

LACP:Link Aggregation Control protocol 链路聚合控制协议 将多条以太网物理链路捆绑在一起成为一条逻辑链路,从而实现增加链路带宽的目的。同时,这些捆绑在一起的链路通过相互间的动态备份,可以有效地提高链路的可靠性 一、配…...

通信工程学习:什么是接入网(AN)中的TF传送功能

接入网(AN)中的TF传送功能 在通信工程中,TF(Transfer Function)传送功能是指为接入网(AN)不同位置之间提供通道和传输介质,以实现数据的有效传输。以下是关于TF传送功能的详细解释&a…...

【JavaEE】IO基础知识及代码演示

目录 一、File 1.1 观察get系列特点差异 1.2 创建文件 1.3.1 delete()删除文件 1.3.2 deleteOnExit()删除文件 1.4 mkdir 与 mkdirs的区别 1.5 文件重命名 二、文件内容的读写----数据流 1.1 InputStream 1.1.1 使用 read() 读取文件 1.2 OutputStream 1.3 代码演示…...

安卓13系统导航方式分析以及安卓13修改默认方式为手势导航 android13修改导航方式

总纲 android13 rom 开发总纲说明 文章目录 1.前言2.问题分析3.代码分析4.代码修改5.彩蛋1.前言 系统导航方式默认一般是按键的,如果要改成手势的话,我们来看看用户怎么修改的: 设置=>系统=>手势=>系统导航,在这里进行修改。我们来分析下这个流程,并且将其修改为…...

[技术杂谈]暗影精灵8plus电竞版台式机安装和使用注意

最近买回二手台式机准备做深度学习训练模型使用。由于个人不是十分有钱,因此下血本入手一台,不然深度学习玩不转。配置:i9-12900K / 64G d4 3733频率 / 1TSSD2TB机械 / RTX3090 24G显卡 旗舰版 机箱45L超大机箱。买回来后整体不错&#…...

【加密算法基础——AES解密实践】

AES 解密实践 AES 解密是对使用 AES 加密算法加密的数据进行恢复的过程。 常用的解密方式有三种: 在线解密工具:格式比较好控制,但是有些在线工具兼容性不好,有时候无法解出,不知道是自己的密文密钥没找对&#xff0…...

Spring01

spring框架 spring是轻量级的容器框架 spring framework 1、Spring核心学习内容 IOC、AOp, jdbcTemplate,声明式事务 2、IOC:控制反转,孚以管理部8号对象 3.AOP:切面编程4.JDBCTemplate:是spring提供一套访问数据库的技术,应用性强,相对好理解5.声明式…...

gogps 利用广播星历解算卫星位置matlab函数satellite_orbits详细注解版

主要注释了广播星历计算GPS BDS卫星位置的。 function [satp, satv] satellite_orbits(t, Eph, sat, sbas)% SYNTAX: % [satp, satv] satellite_orbits(t, Eph, sat, sbas); % % INPUT: % t clock-corrected GPS time % Eph ephemeris matrix % sat satellite…...

Oracle按照某一字段值排序并显示,相同的显示序号

Oracle按照某一字段值排序并显示,相同的显示序号 最近的工作遇到对于相同的字段,按照序号去显示值,并对相同的值进行排序 实验了半天,感觉满意的答案,分享给大家 第一种: ROW_NUMBER 语法: ROW_NUMBER() OVER (ORDER BY your_column) AS sequence_number 说明: 根据your_column…...

【Java基础】String详解

文章目录 String一、String 概述1、基本特性2、不可变性3、String、StringBuilder、StringBuffer 二、字符串 创建与内存分配1、字面量 / 双引号2、new关键字3、StringBuilder.toString()4、intern() 方法5、小结 三、字符串 拼接1、常量常量2、变量 拼接3、final变量 拼接4、拼…...

cmd命令

常用命令 查看电脑名称: hostname 查看网卡信息: ipconfig 快速打开网络设置界面: control.exe netconnections 或 rundll32.exe shell32.dll,Control_RunDLL ncpa.cpld 打开防火墙设置: wf.msc 指定网卡设置IP地址&#…...

《中文Python穿云箭量化平台二次开发技术11》股票基本信息获取分析及应用示例【前十大股东占股比例提取及分析】

《中文Python穿云箭量化平台二次开发技术11》股票基本信息获取分析及应用示例【前十大股东占股比例提取及分析】 《中文Python穿云箭量化平台》是纯Python开发的量化平台,因此其中很多Python模块,我们可以自己设计新的量化工具,例如自己新的行…...

OSINT技术情报精选·2024年9月第1周

OSINT技术情报精选2024年9月第1周 2024.8.15版权声明:本文为博主chszs的原创文章,未经博主允许不得转载。 1、中国信通院:《大模型落地路线图研究报告(2024年)》 近年来,大模型技术能力不断创出新高,产业应用持续走…...

51单片机应用开发---二进制、十六进制与单片机寄存器之间的关系(跑马灯、流水灯实例)

实现目标 1、掌握二进制与十六进制之间的转换 2、掌握单片机寄存器与二进制、十六进制之间的转换 3、掌握单片机驱动跑马灯、流水灯的原理 一、二进制与十六进制之间的转换 1、二进制 二进制(binary), 是在数学和数字电路中以2为基数的…...

信息安全工程师(6)网络信息安全现状与问题

一、网络信息安全现状 威胁日益多样化:网络攻击手段不断翻新,从传统的病毒、木马、蠕虫等恶意软件,到勒索软件、钓鱼攻击、DDoS攻击、供应链攻击等,威胁形式多种多样。这些攻击不仅针对个人用户,还广泛影响企业、政府等…...

亚数TrustAsia亮相第十四届智慧城市与智能经济博览会,入围“2024数据要素创新应用优秀成果”!

智博会 2024年9月6日至8日,由宁波市人民政府、浙江省经济和信息化厅、中国信息通信研究院、中国电子信息行业联合会、中国电信、中国移动、中国联通主办的2024世界数字经济大会暨第十四届智慧城市与智能经济博览会(以下简称“智博会”)在宁波…...

Linux基础开发环境(git的使用)

1.账号注册 git 只是一个工具,要想实现便捷的代码管理,就需要借助第三方平台进行操作,当然第三平台也是基于git 开发的 github 与 gitee 代码托管平台有很多,这里我们首选 Github ,理由很简单,全球开发者…...

VS Code终端命令执行后老是出现 __vsc_prompt_cmd_original: command not found

VS Code终端命令执行后老是出现 __vsc_prompt_cmd_original: command not found。 如下图(vscode终端中): 解决方案: 1、vim ~/.bashrc 2、在~/.bashrc里面加入命令:unset PROMPT_COMMAND 3、source ~/.bashrc...

春天(Spring Spring Boot)

基本概念 春天 Spring 是用于开发 Java 应用程序的开源框架,为解决企业应用开发的复杂性而创建。 Spring 的基本设计思想是利用 IOC(依赖注入)和 AOP (面向切面)解耦应用组件,降低应用程序各组件之间的耦…...

笔记:算法题目中需要处理 int 某个位的三种方法:for、while、to_string

int n; cin >> n; 1. 使用for观察高位、低位、本位 for(int i 1; i < n; i * 10){ //i 1 当前位为个位&#xff0c; i 10 为十位&#xff0c;以此类推 high n / (i * 10)&#xff1b; //这是相对于 i 的高位&#xff0c;例如 i 为个位…...

如何实现本地mqtt服务器和云端服务器同步?

有时候&#xff0c;一个物联网项目&#xff0c;A客户想要本地使用&#xff0c;B客户想要线上使用&#xff0c;C客户想要本地部署&#xff0c;当有网环境时能线上使用。这个时候就需要本地MQTT服务和线上MQTT服务能相互自动转发。 后来经我一翻研究&#xff0c;其实Activemq支持…...

Elasticsearch 常用操作命令整合 (cURL 版本)

Elasticsearch 常用操作命令整合 (cURL 版本) 集群管理 查看集群健康状态 curl -X GET "localhost:9200/_cluster/health?pretty"查看节点信息 curl -X GET "localhost:9200/_cat/nodes?v"查看集群统计信息 curl -X GET "localhost:9200/_clus…...

DeepSeek R1 V2 深度探索:开源AI编码新利器,效能与创意并进

最近&#xff0c;AI界迎来了一位神秘的“突袭者”——DeepSeek团队悄无声息地发布了其推理模型DeepSeek R1的重磅升级版V2&#xff08;具体型号R1-0528&#xff09;。这款基于MIT许可的开源模型&#xff0c;在原版R1的基础上进行了多项令人瞩目的改进&#xff0c;正以其强大的潜…...

发送文件脚本源码版本

V1 适配win10和 win11 #SingleInstance Force SendMode Input SetWorkingDir %A_ScriptDir%; Global variables global TaskList : [] global CurrentFileConfig : "current_file.ini" global RemainingFilesConfig : "remaining_files.ini" global File…...

WINUI——WINUI开发中谨慎使用x:Bind

原因——为什么需要谨慎使用x:Bind&#xff1f; 在实际开发中发现&#xff0c;使用它会导致VM回收不及时&#xff0c;可能导致内存泄漏。 那为何要在项目中使用它呢&#xff1f; 因为&#xff1a;{x&#xff1a;Bind} 标记扩展&#xff08;Windows 10 的新增功能&#xff09;…...

Asp.Net Core基于StackExchange Redis 缓存

NuGet安装 StackExchange.Redis Microsoft.Extensions.Options 0. appsettings.json初始化配置 {"Logging": {"LogLevel": {"Default": "Information","Microsoft.AspNetCore": "Warning"}},"AllowedHos…...

深度学习习题3

1.训练神经网络过程中&#xff0c;损失函数在一些时期&#xff08;Epoch&#xff09;不再减小, 原因可能是&#xff1a; 1.学习率太低 2.正则参数太大 3.卡在了局部最小值 A1 and 2 B. 2 and 3 C. 1 and 3 D. 都是 2.对于分类任务&#xff0c;我们不是将神经网络中的随机权重…...

智能网卡之hinic3 WQE(Work Queue Element)结构梳理

hinic3 WQE&#xff08;Work Queue Element&#xff09;结构详解 本文基于 hinic3 驱动源码&#xff0c;对 WQE&#xff08;Work Queue Element&#xff09;做详细讲解。如需查阅完整源码和结构体定义可参考hinic3_nic_qp.h等文件。 1. WQE 的作用 WQE&#xff08;Work Queue…...

Android 平台RTSP/RTMP播放器SDK接入说明

一、技术背景 自2015年起&#xff0c;大牛直播SDK持续深耕音视频直播领域&#xff0c;自主研发并迭代推出跨平台 RTSP/RTMP 播放模块&#xff0c;具备如下核心优势&#xff1a; 全平台兼容&#xff1a;支持 Android/iOS/Windows/Linux 等主流系统&#xff1b; 超低延迟&#…...