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

数据结构—数组和广义表

4.2数组

数组:按一定格式排列起来的,具有相同类型的数据元素的集合。

**一维数组:**若线性表中的数据元素为非结果的简单元素,则称为一维数组。

**一维数组的逻辑结构:**线性结构,定长的线性表。

**声明格式:**数据类型 变量名称 [长度] ;

例如:int num[5] = {0,1,2,3,4};

**二维数组:**若一维数组中的数据元素又是一维数组结构,则称为二维数组。

二维数组的逻辑结构:

  1. 非线性结构:每一个数据元素既在一个行表中,又在一个列表中。
  2. 线性结构定长的线性表:该线性表的每个数据元素也是一个定长的线性表。

**声明格式:**数据类型 变量名称 [行数] [列数];

例如:int num [5] [8];

在C语言中,一个二维数组类型也可以定义为一维数组类型(其分量类型为一维数组类型),即:

  typedef int array2[m][n];
等价于:typedef int array1[n];typedef array1 array2[m];

**三维数组:**若二维数组中的元素又是一个一维数组,则称作三维数组。

**n维数组:**若 n - 1 维数组中的元素又是一个一维数组结构,则称作 n 维数组。

**结论:**线性表结构是数组结构的一个特例,而数组结构又是线性表结构的扩展。

**数组特点:**结构固定——定义后,维数和维界不再改变。

**数组基本操作:**除了结构的初始化和销毁之外,只有取元素和修改元素值的操作。

4.2.1数组的顺序存储结构

数组特点:结构固定——维数和维界不变。

一般都是采用顺序存储结构来表示数组。

**注意:**数组可以是多维的,但存储数据元素的内存单元地址是一维的,因此,在存储数组结构之前,需要解决将多维关系映射到一维关系的问题。

一维数组:

例:有数组定义:int a[5]

每个元素占用4字节,假设a[0]存储在2000单元,a[3]地址是多少?

LOC(0) = a = 2000 L=4

LOC(3) = 3*4+2000

LOC(i) = i*L + 首地址

存储单元是一维结构,而数组是个多维结构,则用一组连续存储单元存放数组的数据元素就有个次序约定问题。

二维数组可有两种存储方式:

  1. 以行序为主序;

    设数组开始存储位置LOC(0,0),存储每个元素需要L个存储单元

    数组元素a[i] [j]的存储位置是:LOC(i,j)=LOC(0,0) + (n * i + j) * L

  2. 以列序为主序。

**三维数组:**按页/行/列存放,页优先的顺序存储。

4.2.2特殊矩阵的压缩存储

**矩阵:**一个由 m*n 个元素排成的 m 行 n 列的表。

**矩阵的常规存储:**将矩阵描述为一个二维数组。

矩阵的常规存储的特点:

  1. 可以对其元素进行随机存取。
  2. 矩阵运算非常简单;存储的密度为1.

**不适宜常规存储的矩阵:**值相同的元素很多且呈某种规律分布;零元素多。

**矩阵的压缩存储:**为多个相同的非零元素只分配一个存储空间;对零元素不分配空间。

第四章 变 换 - 小专栏

1、什么是压缩存储

若多个数据元素的值都相同,则只分配一个元素值的存储空间,且零元素不占存储空间。

2、什么样的矩阵能够压缩?

一些特殊矩阵,如:对称矩阵,对角矩阵,三角矩阵,稀疏矩阵等。

3、什么叫稀疏矩阵?

矩阵中非零元素的个数较少(一般小于5%)

1.对称矩阵

10421 - 对称矩阵

**【特点】:**在 n*n 的矩阵 a 中,满足如下性质:aij=aji(1≤i , j≤n)

**【存储方法】:**只存储下(或者上)三角(包括主对角线)的数据元素。共占用 n(n+1)/2个元素空间。

**【存储结构】:**对称矩阵上下三角中的元素数均为:n(n+1)/2

​ 可以以行序为主序将元素存放在一个一维数组 sa[ n(n+1)/2 ]中。

2.三角矩阵

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6FofxLkg-1690537372616)(https://tse1-mm.cn.bing.net/th?id=OIF-C.uHr%2bn0jNJ2j8NRD2iircPA&pid=ImgDet&rs=1)]

**【特点】:**对角线以下(或者以上)的数据元素(不包括对角线)全部为常数c。

**【存储方法】:**重复元素c共享一个元素存储空间,共占用n(n+1)/2+1个元素空间:[1…n(n+1)/2+1]

上三角矩阵:

特殊矩阵的压缩存储_Faith_xzc的博客-CSDN博客

下三角矩阵:

三角矩阵压缩 的图像结果

3.对角矩阵(带状矩阵)

img

**【特点】:**在n*n的方阵中,所有非零元素都集中在以主对角线为中心的带状区域中,区域外的值全为0,则称为对角矩阵。常见的有三对角矩阵、五对角矩阵、七对角矩阵等。

数据结构和算法基础-听课摘抄8-串、数组和广义表 - 知乎

4.稀疏矩阵

**稀疏矩阵:**设在 m*n 的矩阵中有 t 个非零元素。

​ 令 δ = t / (m*n)

​ 当 δ ≤ 0.05 时称为稀疏矩阵。

(十五)稀疏矩阵和三元组稀疏矩阵压缩算法_靠谱的混蛋的博客-CSDN博客_稀疏矩阵压缩算法

**压缩存储原则:**存各非零元素的值,行列位置和矩阵的行列数。

4.1三元组顺序表

稀疏矩阵之基于数组形式实现COO和CSR_chenxina7314的博客-CSDN博客

注意:为更可靠描述,通常再加一个“总体”信息:即总行数、总列数、非零元素总个数。

三元组顺序表又称有序的双下标法。

三元组顺序表的优点:非零元素在表中按行序有序存储,因此便于进行依行顺序处理的矩阵运算。

三元组顺序表的缺点:不能随机存取。若按行号存取某一行中的非零元素,则需从头开始进行查找。

4.2十字链表
  • **优点:**它能够灵活地插入因运算而产生的新的非零元素,删除因运算而产生的新的零元素,实现矩阵的各种运算。

  • 在十字链表中,矩阵的每一个非零元素用一个结点表示,该结点除了(row,col,value)以外,还要有两个域:

    • right:用于链接同一行中的下一个非零元素。
    • down:用以链接同一列中的下一个非零元素。
  • 十字链表中结点的结构示意图:

    img

    十字链表法,十字链表压缩存储稀疏矩阵详解

4.3广义表

4.3.1广义表定义

广义表(又称列表Lists)是n≥0个元素 a0,a1,…,an-1的有限序列,其中每一个ai或者是原子,或者是一个广义表。

例如:中国举办的国际足球邀请赛,参赛队伍名单可表示如下:

(阿根廷,巴西,德国,法国,(),西班牙,意大利,英国,(国家队,山东鲁能,广州恒大))

在这个表中,叙利亚队应排在法国队的后面,但未能参加,成为空表。国家队,山东鲁队,广州恒大均作为东道主的参赛队参加,构成一个小的线性表,成为原线性表的一个数据元素。这种拓宽了的线性表就是广义表。

  • 广义表通常记作:LS=( a1,a2,…,an

  • 习惯上,一般用大写字母表示广义表小写字母表示原子

  • **表头:**若LS非空(n≥1),则其第一个元素a1就是表头。记作head(LS)=a1.

    注意:表头可以是原子,也可以是子表。

  • 表尾除表头之外的其他元素组成的表。记作tail(LS)=(a2,…,an)

    注意:表尾不是最后一个元素,而是一个子表。

    例如:(1) A=() 空表,长度为0

    ​ (2)B=(( )) 长度为1,表头、表尾均为()。

    ​ (3)C=(a,(b,c)) 长度为2,由原子a和子表(b,c)构成。表头为a,表尾为((b,c))

    ​ (4)D=(x,y,z) 长度为3,每一项都是原子。表头为x,表尾为(y,z)

    ​ (5)E=(C,D) 长度为2,每一项都是子表。表头为C,表尾为(D)

    ​ (6)F=(a,F) 长度为2,第一项为原子,第二项为它本身。表头为a,表尾为(F)。F=(a,(a,(a,…)))

4.3.2广义表的性质

  1. 广义表的数据元素有相对应次序;一个直接前驱和一个直接后继。

  2. 广义表的长度定义为最外层所包括元素的个数,如C=(a,(b,c))是长度为2的广义表。

  3. 广义表的深度定义为该广义表展开后所含括号的重数

    注意:“原子”的深度为0;“空表”的深度为1。

  4. 广义表可以为其他广义表共享:如:广义表B就共享表A。在B中不必列出A的值,而是通过名称来引用。B=(A)

  5. 广义表可以是一个递归的表。

    注意:递归表的深度是无穷值,长度是有限值。

  6. 广义表是一个多层次结构,广义表的元素可以是单元数,也可以是子表,而子表的元素还可以是子表。

    二叉树的存储方式_长颈鹿仙女的博客-CSDN博客_二叉树的存储方式

4.3.3广义表和线性表的区别

广义表可以看成是线性表的推广线性表是广义表的特例

广义表的结构相当灵活,在某种前提下,它可以兼容线性表、数组、数和有向图等各种常见的数据结构。

当二维数组的每行(或每列)作为子表处理时,二维数组即为一个广义表。

另外,数和有向图也可以用广义表来表示。

由于广义表不仅集中了线性表,数组,数和有向图等常见数据结构的特点,而且可有效地利用存储空间,因此在计算机的许多应用领域都有成功使用广义表的实例。

4.3.4广义表的基本运算

  1. 求表头GetHead(L):非空广义表的第一个元素,可以是一个单一元素,也可以是一个子表。
  2. 求表尾GetTail(L):非空广义表除去表头元素以外其他元素所构成的表,表尾一定是一个表。

相关文章:

数据结构—数组和广义表

4.2数组 数组:按一定格式排列起来的,具有相同类型的数据元素的集合。 **一维数组:**若线性表中的数据元素为非结果的简单元素,则称为一维数组。 **一维数组的逻辑结构:**线性结构,定长的线性表。 **声明…...

服务器负载均衡算法有哪些

算法举例 服务器负载均衡算法是用于分配网络流量到多个服务器的策略,以实现负载均衡和提高系统性能。以下是一些常见的服务器负载均衡算法的详细说明: 轮询(Round Robin)算法: 轮询算法是最简单且常见的负载均衡算法之…...

2023年深圳杯数学建模B题电子资源版权保护问题

2023年深圳杯数学建模 B题 电子资源版权保护问题 原题再现: 版权又称著作权,包括发表权、署名权、修改权、保护作品完整权、复制权、发行权、出租权、展览权、表演权、放映权、广播权、信息网络传播权、摄制权、改编权、翻译权、汇编权及应当由著作权人…...

Easyui中datagrid切换页码后,再次根据其他条件查询,重置为第一页,序号从1开始显示

Easyui中datagrid切换页码后&#xff0c;再次根据其他条件查询&#xff0c;无法将序号重置为1开始显示 1、查询按钮2、datagrid的查询方法3、datagrid点击分页4、重置方法 1、查询按钮 <a href"javascript:Query(1,true)" id"btnQuery" class"eas…...

随笔03 考研笔记整理

图源&#xff1a;文心一言 上半年的博文整理&#xff0c;下半年依然会更新考研类的文章&#xff0c;有需要的小伙伴看向这里~~&#x1f9e9;&#x1f9e9; 另外&#xff0c;这篇文章可能是我上半年的努力成果之一&#xff0c;因此仅关注博主的小伙伴能够查看它~~&#x1f9e…...

一次线上OOM问题的个人复盘

我们一个java服务上线后&#xff0c;偶尔会发生内存OOM(Out Of Memory)问题&#xff0c;但由于OOM导致服务不响应请求&#xff0c;健康检查多次不通过&#xff0c;最后部署平台kill了java进程&#xff0c;这导致定位这次OOM问题也变得困难起来。 最终&#xff0c;在多次review代…...

【机器学习】基础知识点的汇总与总结!更新中

文章目录 一、监督学习1.1、单模型1.1.1、线性回归1.1.2、逻辑回归&#xff08;Logistic Regression&#xff09;1.1.3、K近邻算法&#xff08;KNN&#xff09;1.1.4、决策树1.1.5、支持向量机&#xff08;SVM&#xff09;1.1.6、朴素贝叶斯 1.2、集成学习1.2.1、Boosting1&…...

NLP杂记

来京一周余&#xff0c;初病将愈&#xff0c;终跑通llama及ViT&#xff0c;记于此—— 之前都是做的图像&#xff0c;大模型迁移基本上都是NLP相关的知识&#xff0c;很多东西和CV差距还是有点&#xff0c;再加上大模型对算力要求较高&#xff0c;基于云的操作对我一个习惯在本…...

算法通过村第二关-链表白银笔记

文章目录 再战链表|反转链表剑指 Offer II 024. 反转链表熟练掌握这两种解法建立头节点的解决思路不采用建立头节点的方法采用循环/递归的方式解决 总结 再战链表|反转链表 提示&#xff1a;多拿些酒来&#xff0c;因为生命只有乌有。 剑指 Offer II 024. 反转链表 如果不使用…...

力扣题库刷题笔记75--颜色分类

1、题目如下&#xff1a; 2、个人Pyhon代码实现如下&#xff1a; 第一种思路是取巧&#xff0c;通过计数0、1、2的个数&#xff0c;去替换nums 备注第10行代码在本地可以跑过&#xff0c;但是力扣跑不过&#xff0c;所以就用了第10-16行代码进行替换 第二种思路是通过冒泡排序去…...

《面试1v1》如何提高远程用户的吞吐量

&#x1f345; 作者简介&#xff1a;王哥&#xff0c;CSDN2022博客总榜Top100&#x1f3c6;、博客专家&#x1f4aa; &#x1f345; 技术交流&#xff1a;定期更新Java硬核干货&#xff0c;不定期送书活动 &#x1f345; 王哥多年工作总结&#xff1a;Java学习路线总结&#xf…...

论文笔记--Distilling the Knowledge in a Neural Network

论文笔记--Distilling the Knowledge in a Neural Network 1. 文章简介2. 文章概括3 文章重点技术3.1 Soft Target3.2 蒸馏Distillation 4. 文章亮点5. 原文传送门 1. 文章简介 标题&#xff1a;Distilling the Knowledge in a Neural Network作者&#xff1a;Hinton, Geoffre…...

Mac上安装sshfs

目录 写在前面安装使用参考完 写在前面 1、本文内容 Mac上安装sshfs 2、平台 mac 3、转载请注明出处&#xff1a; https://blog.csdn.net/qq_41102371/article/details/130156287 安装 参考&#xff1a;https://ports.macports.org/port/sshfs/ 通过port安装 点击啊insta…...

MQ公共特性介绍 (ActiveMQ, RabbitMQ, RocketMQ, Kafka对比)

本章介绍 本文主要介绍所有MQ框架都具备的公共特点&#xff0c;同时对比了一些目前比较主流MQ框架的优缺点&#xff0c;给大家做技术选型作参考。 文章目录 本章介绍MQ介绍适用场景异步通信案例一案例二 系统解耦削峰填谷广播通信总结 缺点MQ对比APQP历史AMQP是什么 MQ介绍 M…...

灵雀云Alauda MLOps 现已支持 Meta LLaMA 2 全系列模型

在人工智能和机器学习领域&#xff0c;语言模型的发展一直是企业关注的焦点。然而&#xff0c;由于硬件成本和资源需求的挑战&#xff0c;许多企业在应用大模型时仍然面临着一定的困难。为了帮助企业更好地应对上述挑战&#xff0c;灵雀云于近日宣布&#xff0c;企业可通过Alau…...

技术方案模版

技术方案模板 概述 1.1 术语 名称 说明 1.2 需求背景 来自产品的需求可以引用PRD和设计稿 技术类的改造需要写明背景业务用例分析 从需求中抽象出的核心用例详细设计 3.1 应用架构 3.2 模型设计 领域模型的关系&#xff0c;可以用UML 类图来实现 3.3. 详细实现 可以通过时序图…...

【Linux命令200例】cut强大的文本处理工具

&#x1f3c6;作者简介&#xff0c;黑夜开发者&#xff0c;全栈领域新星创作者✌&#xff0c;2023年6月csdn上海赛道top4。 &#x1f3c6;本文已收录于专栏&#xff1a;Linux命令大全。 &#x1f3c6;本专栏我们会通过具体的系统的命令讲解加上鲜活的实操案例对各个命令进行深入…...

《论文阅读》具有特殊Token和轮级注意力的层级对话理解 ICLR 2023

《论文阅读》具有特殊Token和轮级注意力的层级对话理解 前言简介问题定义模型构建知识点Intra-turn ModelingInter-turn Modeling分类前言 你是否也对于理解论文存在困惑? 你是否也像我之前搜索论文解读,得到只是中文翻译的解读后感到失望? 小白如何从零读懂论文?和我一…...

C# 定时器封装版

一、概述 在 Winform 等平台开发中&#xff0c;经常会用到定时器的功能&#xff0c;但项目定时器一旦写多了&#xff0c;容易使软件变卡&#xff0c;而且运行时间长了会造成软件的闪退&#xff0c;这个可能是内存溢出造成的&#xff0c;具体原因我也没去深究&#xff0c;另一个…...

前端学习——Vue (Day4)

组件的三大组成部分 组件的样式冲突 scoped <template><div class"base-one">BaseOne</div> </template><script> export default {} </script><style scoped> /* 1.style中的样式 默认是作用到全局的2.加上scoped可以让样…...

CVPR 2025 MIMO: 支持视觉指代和像素grounding 的医学视觉语言模型

CVPR 2025 | MIMO&#xff1a;支持视觉指代和像素对齐的医学视觉语言模型 论文信息 标题&#xff1a;MIMO: A medical vision language model with visual referring multimodal input and pixel grounding multimodal output作者&#xff1a;Yanyuan Chen, Dexuan Xu, Yu Hu…...

2025年能源电力系统与流体力学国际会议 (EPSFD 2025)

2025年能源电力系统与流体力学国际会议&#xff08;EPSFD 2025&#xff09;将于本年度在美丽的杭州盛大召开。作为全球能源、电力系统以及流体力学领域的顶级盛会&#xff0c;EPSFD 2025旨在为来自世界各地的科学家、工程师和研究人员提供一个展示最新研究成果、分享实践经验及…...

相机Camera日志实例分析之二:相机Camx【专业模式开启直方图拍照】单帧流程日志详解

【关注我&#xff0c;后续持续新增专题博文&#xff0c;谢谢&#xff01;&#xff01;&#xff01;】 上一篇我们讲了&#xff1a; 这一篇我们开始讲&#xff1a; 目录 一、场景操作步骤 二、日志基础关键字分级如下 三、场景日志如下&#xff1a; 一、场景操作步骤 操作步…...

Day131 | 灵神 | 回溯算法 | 子集型 子集

Day131 | 灵神 | 回溯算法 | 子集型 子集 78.子集 78. 子集 - 力扣&#xff08;LeetCode&#xff09; 思路&#xff1a; 笔者写过很多次这道题了&#xff0c;不想写题解了&#xff0c;大家看灵神讲解吧 回溯算法套路①子集型回溯【基础算法精讲 14】_哔哩哔哩_bilibili 完…...

重启Eureka集群中的节点,对已经注册的服务有什么影响

先看答案&#xff0c;如果正确地操作&#xff0c;重启Eureka集群中的节点&#xff0c;对已经注册的服务影响非常小&#xff0c;甚至可以做到无感知。 但如果操作不当&#xff0c;可能会引发短暂的服务发现问题。 下面我们从Eureka的核心工作原理来详细分析这个问题。 Eureka的…...

Spring是如何解决Bean的循环依赖:三级缓存机制

1、什么是 Bean 的循环依赖 在 Spring框架中,Bean 的循环依赖是指多个 Bean 之间‌互相持有对方引用‌,形成闭环依赖关系的现象。 多个 Bean 的依赖关系构成环形链路,例如: 双向依赖:Bean A 依赖 Bean B,同时 Bean B 也依赖 Bean A(A↔B)。链条循环: Bean A → Bean…...

在QWebEngineView上实现鼠标、触摸等事件捕获的解决方案

这个问题我看其他博主也写了&#xff0c;要么要会员、要么写的乱七八糟。这里我整理一下&#xff0c;把问题说清楚并且给出代码&#xff0c;拿去用就行&#xff0c;照着葫芦画瓢。 问题 在继承QWebEngineView后&#xff0c;重写mousePressEvent或event函数无法捕获鼠标按下事…...

VM虚拟机网络配置(ubuntu24桥接模式):配置静态IP

编辑-虚拟网络编辑器-更改设置 选择桥接模式&#xff0c;然后找到相应的网卡&#xff08;可以查看自己本机的网络连接&#xff09; windows连接的网络点击查看属性 编辑虚拟机设置更改网络配置&#xff0c;选择刚才配置的桥接模式 静态ip设置&#xff1a; 我用的ubuntu24桌…...

jmeter聚合报告中参数详解

sample、average、min、max、90%line、95%line,99%line、Error错误率、吞吐量Thoughput、KB/sec每秒传输的数据量 sample&#xff08;样本数&#xff09; 表示测试中发送的请求数量&#xff0c;即测试执行了多少次请求。 单位&#xff0c;以个或者次数表示。 示例&#xff1a;…...

[大语言模型]在个人电脑上部署ollama 并进行管理,最后配置AI程序开发助手.

ollama官网: 下载 https://ollama.com/ 安装 查看可以使用的模型 https://ollama.com/search 例如 https://ollama.com/library/deepseek-r1/tags # deepseek-r1:7bollama pull deepseek-r1:7b改token数量为409622 16384 ollama命令说明 ollama serve #&#xff1a…...