【数据结构】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矩阵的十字链表表示
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【机器学习笔记】7 KNN算法

距离度量 欧氏距离(Euclidean distance) 欧几里得度量(Euclidean Metric)(也称欧氏距离)是一个通常采用的距离定义,指在𝑚维空间中两个点之间的真实距离,或者向量的自然长度(即该点…

分布式文件系统 SpringBoot+FastDFS+Vue.js【四】

分布式文件系统 SpringBootFastDFSVue.js【四】 八、文件的下载和删除功能8.1.FastDFSClient.java8.2.FileServerController.java8.3.Vue的fast.js8.4.fastdfsimg.vue8.5.效果 九、总结endl 八、文件的下载和删除功能 8.1.FastDFSClient.java Slf4j public class FastDFSClie…

websocket数据帧格式

客户端、服务端数据的交换,离不开数据帧格式的定义。因此,在实际讲解数据交换之前,我们先来看下WebSocket的数据帧格式。 WebSocket客户端、服务端通信的最小单位是帧(frame),由1个或多个帧组成一条完整的消…

Atcoder ABC339 C - Perfect Bus

Perfect Bus(完美的公交车) 时间限制:2s 内存限制:1024MB 【原题地址】 所有图片源自Atcoder,题目译文源自脚本Atcoder Better! 点击此处跳转至原题 【问题描述】 【输入格式】 【输出格式】 【样例1】 【样例输…

排序算法---计数排序

原创不易,转载请注明出处。欢迎点赞收藏~ 计数排序(Counting Sort)是一种线性时间复杂度的排序算法,其核心思想是通过统计待排序元素的个数来确定元素的相对位置,从而实现排序。 具体的计数排序算法步骤如下&#xff…

Netty Review - 直接内存的应用及源码分析

文章目录 Pre概述应用访问效率: 堆内存 VS 直接内存申请效率: 堆内存 VS 直接内存数据存储结构: 堆内存 VS 直接内存结论 ByteBuffer.allocateDirect 源码分析unsafe.allocateMemory(size) ---> C方法 JVM参数 -XX:MaxDirectMemorySize直接…

视觉slam十四讲学习笔记(五)非线性优化

已经知道,方程中的位姿可以由变换矩阵来描述,然后用李代数进行优化。观测方程由相机成像模型给出,其中内参是随相机固定的,而外参则是相机的位姿。 目录 前言 一、状态估计问题 1 最大后验与最大似然 2 最小二乘的引出 二、非…

JavaScript中null和undefined的区别

JavaScript中null和undefined是两个特殊的值,经常在编程中遇到。虽然它们经常被混淆,但它们有着不同的含义和用法。本文将详细介绍JavaScript中null和undefined的区别,帮助开发者更好地理解和使用它们。 首先,让我们来了解一下nu…

css篇---移动端适配的方案有哪几种

移动端适配 移动端适配是指同一个页面可以在不同的移动端设备上都有合理的布局。主流实现的方案有 响应式布局通过rem或者vw,vh 等实现不同设备有相同的比例而实现适配 首先需要了解viewport 【视口】 视口代表了一个可看见的多边形区域(通常来说是矩形&#xff0…

函数递归与迭代附n的阶乘+顺序打印一个整数的每一位数+求第n个斐波那契数

1. 什么是递归&#xff1f; 递归其实是一种解决问题的方法&#xff0c;在C语言中&#xff0c;递归就是函数自己调用自己。 下面是一个最简单的C语言递归代码&#xff1a; #include <stdio.h> int main() {printf("hehe\n");main();//main函数中⼜调⽤了main函数…

BBC英式口语~发音练习~笔记整理

参考资料 原视频地址&#xff1a; https://www.bilibili.com/video/BV1D7411n7bS/?spm_id_from333.1245.0.0&vd_source5986fc7c8e6d754f3ca44233573aeaff 笔记图片

2.11题目

#include <stdio.h> int main() { char a; while((a getchar()) ! -1) { if(a > A && a < Z) a32; putchar(ch); } return 0;} ———————————————— 版权声明&#xff1a;本文为博主原创文章…

阿里云/腾讯云幻兽帕鲁服务器据点最大帕鲁工作数量最多15个,改成20不生效?

例如&#xff0c;在阿里云的计算巢管理中&#xff0c;找到你的这台部署幻兽帕鲁的服务器实例&#xff0c;选择右上角的“修改游戏配置” 然后选择“基地内工作帕鲁的最大数量”改成20 有人说更改上面的数字&#xff0c;根本不起作用。原因可能如下&#xff1a; 参考资料&#…

css篇---分辨率物理像素和逻辑像素

物理分辨率和逻辑分辨率 物理分辨率是生产屏幕时就固定的&#xff0c;它是不可改变的 -----电脑像素 逻辑分辨率是由软件决定的 【电脑的设置中可以修改分辨率】----css像素 设备像素比 dpr同一方向上的物理像素/css像素 &#xff08;缩放比是1的情况&#xff09; 假设dpr4/…

网络安全最典型基础靶场-DVWA-本地搭建与初始化

写在前面&#xff1a; 之前也打过这个 DVWA 靶场&#xff0c;但是是在虚拟机环境下的一个小块分区靶场&#xff1b; 本篇博客主要介绍在本地搭建 DVWA 靶场以及靶场的初始化&#xff0c;后续会陆续更新通关教程。 由于我们是在本地搭建&#xff0c;则需要基于你已经装好 phpstu…

cefsharp121(cef121.3.7Chromium121.0.6167.160)升级测试及其他H264版本

一、版本说明 1.1 本此版本 此版本CEF 121.3.7+g82c7c57+chromium-121.0.6167.160 / Chromium 121.0.6167.160 1.2 其他支持H264版本 支持H264推荐版本:V100,V109,V111,V119版本,其他V114,V115,V108,V107 支持win7/win8/win8.1最后版本v109.x 支持NET4.5.2最后版本v114.x …

一览大模型长文本能力

前言 如今的大模型被应用在各个场景&#xff0c;其中有些场景则需要模型能够支持处理较长文本的能力(比如8k甚至更长)&#xff0c;其中已经有很多开源或者闭源模型具备该能力比如GPT4、Baichuan2-192K等等。 那关于LLM的长文本能力&#xff0c;目前业界通常都是怎么做的&…

STM32 寄存器操作 GPIO 与下降沿中断

一、如何使用stm32寄存器点灯&#xff1f; 1.1 寄存器映射表 寄存器本质就是一个开关&#xff0c;当我们把芯片寄存器配置指定的状态时即可使用芯片的硬件能力。 寄存器映射表则是开关的地址说明。对于我们希望点亮 GPIO_B 的一个灯来说&#xff0c;需要关注以下的两个寄存器…

leetcode hot100不同路径

本题可以采用动态规划来解决。还是按照五部曲来做 确定dp数组&#xff1a;dp[i][j]表示走到&#xff08;i&#xff0c;j&#xff09;有多少种路径 确定递推公式&#xff1a;我们这里&#xff0c;只有两个移动方向&#xff0c;比如说我移动到&#xff08;i&#xff0c;j&#x…

【机器学习】数据清洗之识别重复点

&#x1f388;个人主页&#xff1a;甜美的江 &#x1f389;欢迎 &#x1f44d;点赞✍评论⭐收藏 &#x1f917;收录专栏&#xff1a;机器学习 &#x1f91d;希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff0c;让我们共同学习、交流进步…