【数据结构】10 广义表与多重链表

广义表

广义表不仅跟线性表一样可以表示简单是线性顺序关系,而且可以表达更复杂的非线性多元关系。
G L i s t = ( a 1 , a 2 , . . . , a i − 1 , a i , a i + 1 , . . . , a n ) GList = (a_1, a_2,...,a_{i-1},a_i,a_{i+1},...,a_n) GList=(a1,a2,...,ai1,ai,ai+1,...,an)
其中, a i a_i ai可以是单元素,也可以是广义表。

由于广义表的元素可以是不同的结构,因此不适于顺序存储,通常用链式存储结构,也就是用由结点组成的链表来表示广义表。结点对应每个元素。如果该元素还是一个广义表,则通过该节点引出另一个链表。

广义表的结点可能由两种情况。

  1. 单元素:需要一个域来存储该单元素的值
  2. 广义表:需要一个域来指向另一个链表。

数据结构

typedef int ElementType;
typedef struct GNode* GList;
typedef struct GNode* PtrToGNode;
struct GNode {int Tag; // 标志域: 0表示该节点为单元素; 1表示该节点为广义表union MyUnion{//子表指针域Sublist和单元素数据域Data复用,即共享存储空间ElementType Data;GList Sublist;};PtrToGNode Next;//指向后继结点};

在这里插入图片描述
举例: 广义表LS:(a, (b,…),(c,d),(e,f))
在这里插入图片描述

多重链表

存在结点属于多个链的链表叫做多重链表。
一般来说,多重链表的每个结点的指针域会有很多个,如前面列子包含Next和Sublist的两个指针域。但是包含两个指针域的链表不一定是多重链表,如双向链表,其每个结点还是属于同一个链表。

稀疏矩阵的存储

对于矩阵A
A = [ 18 0 0 2 0 0 27 0 0 0 0 0 0 − 4 0 23 − 1 0 0 12 ] A = \begin{bmatrix} 18& 0 &0 &2 &0 \\ 0& 27 &0 &0 &0 \\ 0& 0 & 0 & -4 & 0 \\ 23& -1 & 0 &0 &12 \end{bmatrix} A= 180023027010000204000012
可以采用一种经典的多重链表——十字链表来存储稀疏矩阵。

特点

(1)、只存储矩阵中非0的元素项;

(2)、结点的数据域:行坐标Row、列坐标Col、数值Value

(3)、每个结点通过两个指针域,把同行、同列串起来

行指针(或者称为向右指针)Right

列指针(或者称为向下指针):Down

(4)、用一个Tag来区分头结点和非0元素结点

(5)、头节点的标识值为“Head”,矩阵非0元素结点的标识值为“Term”

结点分类:

  1. 每行每列的头结点 (右图)
  2. 矩阵的非0元素节点 (左图)

在这里插入图片描述
A矩阵的十字链表表示
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Android】使用Apktool反编译Apk文件

文章目录 1. 下载Apktool1.1 Apktool官网下载1.2 百度网盘下载 2. 安装Apktool3. 使用Apktool3.1 配置Java环境3.2 准备Apk文件3.3 反编译Apk文件3.3.1 解包Apk文件3.3.2 修改Apk文件3.3.3 打包Apk文件3.3.4 签名Apk文件 1. 下载Apktool 要使用Apktool,需要准备好 …

Elasticsearch:特定领域的生成式 AI - 预训练、微调和 RAG

作者:来自 Elastic Steve Dodson 有多种策略可以将特定领域的知识添加到大型语言模型 (LLM) 中,并且作为积极研究领域的一部分,正在研究更多方法。 对特定领域数据集进行预训练和微调等方法使 LLMs 能够推理并生成特定领域语言。 然而&#…

【JAVA-Day89】Java字符串和XML数据结构的转换

Java字符串和XML数据结构的转换 Java字符串和XML数据结构的转换,高效灵活转变数据摘要引言一、什么是XML二、XML格式的应用场景三、XML字符串转对象3.1 使用 DOM 解析器实现 XML 字符串转对象3.2 使用 JAXB 实现 XML 字符串转对象 四、XML对象转字符串4.1 使用 DOM …

【AI绘画】硬核解读Stable Diffusion(完整版) 小白必收藏!!!

手把手教你入门绘图超强的AI绘画,用户只需要输入一段图片的文字描述,即可生成精美的绘画。给大家带来了全新保姆级教程资料包 (文末可获取) 2022年可谓是AIGC(AI Generated Content)元年,上半年…

VitePress-15- 配置- description 的作用详解

作用描述 1、descriptioin 是站点的描述&#xff0c; 会被解析为 html 页面的 <meta name"description" content "xxx"> 标签 。2、description 本身就是 <meta> 标签的一种&#xff0c;不会在页面上展示出来&#xff0c; 仅仅是作为页面的一…

【MySQL/Redis】如何实现缓存一致

目录 不实用的方案 1. 先写 MySQL , 再写 Redis 2. 先写 Redis &#xff0c; 再写MySQL 3. 先删 Redis&#xff0c;再写 MySQL 实用的方案 1. 先删 Redis&#xff0c;再写 MySQL, 再删 Redis 2. 先写 MySQL , 再删 Redis 3. 先写MySQL&#xff0c;通过BinLog&#xff0…

中国金融体系与金融监管详解,国内金融机构业务与产品大全

一、教程描述 本套教程讲解了国内金融监管的相关规则和基础设施&#xff0c;以及国内金融机构的全线业务和金融产品&#xff0c;可以帮助你搭建国内金融体系的知识框架模型。本套金融体系教程&#xff0c;大小1.66G&#xff0c;共有25个文件。 二、教程目录 01、金融机构与金…

【算法设计与分析】搜索旋转排序数组

&#x1f4dd;个人主页&#xff1a;五敷有你 &#x1f525;系列专栏&#xff1a;算法分析与设计 ⛺️稳中求进&#xff0c;晒太阳 题目 整数数组 nums 按升序排列&#xff0c;数组中的值 互不相同 。 在传递给函数之前&#xff0c;nums 在预先未知的某个下标 k&#xff…

【PyQt】12-滑块、计数控件

文章目录 前言一、滑块控件 QSlider运行结果 二、计数器控件 QSpinBox运行结果 总结 前言 1、滑块控件 2、计数控件 一、滑块控件 QSlider #Author &#xff1a;susocool #Creattime:2024/2/15 #FileName:28-滑块控件 #Description: 通过滑块选择字体大小 import sys from PyQ…

安全基础~通用漏洞4

文章目录 知识补充XSS跨站脚本**原理****攻击类型**XSS-后台植入Cookie&表单劫持XSS-Flash钓鱼配合MSF捆绑上线ctfshow XSS靶场练习 知识补充 SQL注入小迪讲解 文件上传小迪讲解 文件上传中间件解析 XSS跨站脚本 xss平台&#xff1a; https://xss.pt/ 原理 恶意攻击者…

代码随想录 Leetcode860. 柠檬水找零

题目&#xff1a; 代码(首刷自解 2024年2月15日&#xff09;&#xff1a; class Solution { public:bool lemonadeChange(vector<int>& bills) {vector<int> leftchange(2,0);//leftchange[0]代表5元数量&#xff0c;1代表10for (int i 0; i < bills.size…

《剑指 Offer》专项突破版 - 面试题 47 : 二叉树剪枝(C++ 实现)

题目链接&#xff1a;LCR 047. 二叉树剪枝 - 力扣&#xff08;LeetCode&#xff09; 题目&#xff1a; 一棵二叉树的所有节点的值要么是 0 要么是 1&#xff0c;请剪除该二叉树中所有节点的值全都是 0 的子树。例如&#xff0c;在剪除下图 (a) 中二叉树中所有节点值都为 0 的…