【数据结构】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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1535678.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

Java抽象类和接口的学习了解

目录 1. 抽象类 1.1 抽象类概念 1.2例子 1.3 抽象类语法 1.被 abstract 修饰的类--抽象类 2.抽象类中被 abstract 修饰的方法--抽象方法,该方法不用给出具体的实现体 3.当一个类中含有抽象方法时,该类必须要abstract修饰 4.抽象类也是类&#xff…

PCIe进阶之TL:Address Spaces, Transaction Types, and Usage

1 Transaction Layer Overview 如上图为PCIe设备的一个分层结构,从上层逻辑看,事务层的关键点是: 流水线式的完整的 split-transaction 协议事务层数据包(TLP)的排序和处理基于信用的流控制机制可选支持的数据中毒功能和端到端数据完整性检测功能事务层包含以下内容: TLP…

828华为云征文|部署在线文件管理器 Spacedrive

828华为云征文|部署在线文件管理器 Spacedrive 一、Flexus云服务器X实例介绍1.1 云服务器介绍1.2 产品优势1.3 计费模式 二、Flexus云服务器X实例配置2.1 重置密码2.2 服务器连接2.3 安全组配置 三、部署 Spacedrive3.1 Spacedrive 介绍3.2 Docker 环境搭建3.3 Spac…

JNI 详细介绍

一 介绍 java调⽤c,c代码可以通过JNIEnv执行java代码。 安卓NDK 已经对JNI环境进行了集成,我们可以通过android studio来快速搭建一个项目。 二 项目搭建 打开android studio 创建工程,创建工程选择模板Native C 三 模板格式介绍 生成的…

基于Python实现的一个电影知识库QA系统

1. 实现效果 1. 图形展示 这是使用echarts.js 来实现的自定义页面的图谱展示,当然还有其他的库也能实现类似的效果,这里看各位的选择。 这里我在每个实体之间都实现了双层关系的绑定,这对于后面实现检索会有点帮助 2. 实体搜索展示 这里…

数字孪生卷进了天气预报行业

在视频中,上一秒主持人还在大屏幕前正常播报天气。下一秒,场景切换,主持人走到旁边,演播室边上呈现出狂风骤雨的街道,随着播报,一棵被台风吹倒的树“砸进”演播室,营造出一种惊险的感觉&#xf…

Java | Leetcode Java题解之第405题数字转换为十六进制数

题目: 题解: class Solution {public String toHex(int num) {if (num 0) {return "0";}StringBuffer sb new StringBuffer();for (int i 7; i > 0; i --) {int val (num >> (4 * i)) & 0xf;if (sb.length() > 0 || val …

Java | Leetcode Java题解之第406题根据身高重建队列

题目&#xff1a; 题解&#xff1a; class Solution {public int[][] reconstructQueue(int[][] people) {Arrays.sort(people, new Comparator<int[]>() {public int compare(int[] person1, int[] person2) {if (person1[0] ! person2[0]) {return person2[0] - perso…

驾驶员注意力分神状态检测系统源码分享

驾驶员注意力分神状态检测检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of …

springboot医院预约挂号系统 ---附源码73444

目录 1 绪论 1.1 研究背景 1.2研究意义 1.3论文结构与章节安排 2 医院预约挂号系统系统分析 2.1 可行性分析 2.2 系统功能分析 2.3 系统用例分析 2.4 系统流程分析 2.5本章小结 3 医院预约挂号系统总体设计 3.1 系统功能模块设计 3.2 数据库设计 3.4本章小结 4 医…

【文件系统】软硬链接

目录 1. 汇总 ext2 文件系统2. 文件名 与 inode 的关联3. 软硬链接3.1 理解硬链接3.2 理解软链接3.3 软硬链接的应用场景 1. 汇总 ext2 文件系统 新建文件 一个文件一定是在某个路径下创建的&#xff0c;有了路径&#xff0c;就能够知道该新建文件所在分区&#xff0c;然后再查…

在线查看 Android 系统源代码 AOSPXRef and AndroidXRef

在线查看 Android 系统源代码 AOSPXRef and AndroidXRef 1. AOSPXRef1.1. http://aospxref.com/android-14.0.0_r2/1.2. build/envsetup.sh 2. AndroidXRef2.1. http://androidxref.com/9.0.0_r3/2.2. build/envsetup.sh 3. HELLO AndroidReferences 1. AOSPXRef http://aospx…

JAVA基础面试题总结(十五)——设计模式

面试专题-设计模式 前言 在平时的开发中&#xff0c;涉及到设计模式的有两块内容&#xff0c;第一个是我们平时使用的框架&#xff08;比如spring、mybatis等&#xff09;&#xff0c;第二个是我们自己开发业务使用的设计模式。 面试官一般比较关心的是你在开发过程中&#…

浮动元素详解

浮动元素 代码实现&#xff1a; <!DOCTYPE html> <html><head><meta charset"utf-8"><title>浮动元素</title><style>#container1 {width: 400px;height: 50px;background-color: lightgrey;border: 1px solid;}#contai…

828华为云征文|华为云Flexus云服务器X实例之openEuler系统下dufs文件服务器

828华为云征文&#xff5c;华为云Flexus云服务器X实例之openEuler系统下dufs文件服务器 一、Flexus云服务器X实例介绍1.1 Flexus云服务器X实例简介1.2 Flexus云服务器X实例特点1.3 Flexus云服务器X实例使用场景 二、dufs介绍2.1 dufs简介2.2 dufs特点2.3 使用场景 三、本次实践…

学习整理vue前端框架项目目录结构的含义

学习整理vue前端框架项目目录结构的含义 1、目录结构2、结构含义 1、目录结构 2、结构含义

大模型大侦探-一次丝滑的探图记录

文章目录 缘起调查深入确认总结 缘起 最近找到了我的一台老笔记本电脑&#xff0c;竟然还能开机&#xff0c;是XP的。里面有一个桌面&#xff0c;叫做panMilk: 这太美了&#xff0c;但这是哪里&#xff1f;这个问题在20年前就困扰了我&#xff0c;不得答案。这些年学校、公司的…

CorrMatch复现

复现结果–Full&#xff1a;81.78327847863439&#xff0c;成功 U2PL’s splits计算量太大&#xff0c;不建议复现

美团图床设置教程

大厂图床&#xff0c;CDN加速 项目地址&#xff1a;https://github.com/woniu336/mt-img 使用方法 在mt.php填上你的token即可&#xff0c;然后打开index.html上传图片 获取token方法 注册https://czz.meituan.com/发布视频&#xff0c;上传封面&#xff0c;注意在上传封面后…

2024年汉字小达人区级自由报名备考冲刺:往年真题练一练

2024年第十一届汉字小达人的区级活动的时间9月25-30日正式开赛&#xff0c;还有不到两周时间。 最后的冲刺时间&#xff0c;可以利用接下来的三天中秋假期做几套模拟题&#xff0c;熟悉汉字小达人的比赛形式、考察方式&#xff0c;尤其是把2024年的模拟题做做熟&#xff0c;查…