当前位置: 首页 > 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 (面向切面)解耦应用组件,降低应用程序各组件之间的耦…...

Pixel Script Temple部署教程:ARM服务器(如NVIDIA Grace)上Qwen2.5量化部署

Pixel Script Temple部署教程:ARM服务器(如NVIDIA Grace)上Qwen2.5量化部署 1. 项目概述 Pixel Script Temple是一款基于Qwen2.5-14B-Instruct深度微调的专业剧本创作工具。它将AI推理能力与8-Bit复古美学相结合,为创作者提供沉…...

C++技术岗面试经验总结

🎬 胖咕噜的稞达鸭:个人主页🔥 个人专栏: 《数据结构》《C初阶高阶》 《Linux系统学习》 《算法日记》⛺️技术的杠杆,撬动整个世界! 1. 右值引用和左值引用的区别 左值是我们平常使用的函数对象,表达式结束后依旧存在…...

如何完整解决Bilibili API风控限制?开发者高效应对指南

如何完整解决Bilibili API风控限制?开发者高效应对指南 【免费下载链接】bilibili-api 哔哩哔哩常用API调用。支持视频、番剧、用户、频道、音频等功能。原仓库地址:https://github.com/MoyuScript/bilibili-api 项目地址: https://gitcode.com/gh_mir…...

MT5 Zero-Shot实战案例:跨境电商多语言商品描述中文初稿生成与改写优化

MT5 Zero-Shot实战案例:跨境电商多语言商品描述中文初稿生成与改写优化 1. 项目概述与核心价值 在跨境电商运营中,商品描述的多语言版本制作是一个耗时耗力的过程。传统方法需要先撰写中文初稿,然后逐条翻译成各种语言,不仅效率…...

BaiduPCS-Web:智能突破百度网盘限速的革命性解决方案

BaiduPCS-Web:智能突破百度网盘限速的革命性解决方案 【免费下载链接】baidupcs-web 项目地址: https://gitcode.com/gh_mirrors/ba/baidupcs-web 还在为百度网盘的下载速度而烦恼吗?当急需下载重要文件时,几十KB/s的速度是否让你感到…...

终极Webpack插件完全手册:从Awesome-Webpack探索插件生态的10个实用技巧

终极Webpack插件完全手册:从Awesome-Webpack探索插件生态的10个实用技巧 【免费下载链接】awesome-webpack A curated list of awesome Webpack resources, libraries and tools 项目地址: https://gitcode.com/gh_mirrors/aw/awesome-webpack Webpack作为现…...

AIGC内容创作:结合Qwen3-ASR-0.6B实现视频音频自动生成字幕

AIGC内容创作:结合Qwen3-ASR-0.6B实现视频音频自动生成字幕 做视频最头疼的是什么?对我来说,不是拍摄,不是剪辑,而是加字幕。一小时的访谈视频,手动听打、校对、对齐时间轴,三四个小时就没了。…...

告别默认丑界面!手把手教你用.vimrc文件配置出高颜值、高效率的Gvim工作环境

告别默认丑界面!手把手教你用.vimrc文件配置出高颜值、高效率的Gvim工作环境 第一次打开Gvim时,那个灰蒙蒙的界面和密密麻麻的代码是不是让你瞬间失去了继续使用的欲望?别急着关掉它——通过简单的.vimrc配置,你完全可以把这款经典…...

避开PLC烧毁陷阱:FX3S晶体管输出必须知道的7个细节(含虚设电阻计算)

避开PLC烧毁陷阱:FX3S晶体管输出必须知道的7个细节(含虚设电阻计算) 在工业自动化现场,FX3S系列PLC的晶体管输出模块烧毁问题堪称"隐形杀手"。去年某汽车生产线因一个0.5A保险丝选型错误导致全线停产8小时,损…...

从“画个女孩”到“绝世圣女”:圣女司幼幽-造相Z-Turbo提示词进阶指南

从“画个女孩”到“绝世圣女”:圣女司幼幽-造相Z-Turbo提示词进阶指南 1. 理解圣女司幼幽-造相Z-Turbo模型特性 1.1 模型定位与核心优势 圣女司幼幽-造相Z-Turbo是基于Z-Image-Turbo的LoRA微调版本,专门针对"牧神记"中的圣女司幼幽角色进行…...