数组的定义、顺序存储及特殊矩阵的存储

目录

一、数组的定义

1.1概念

1.2抽象数据类型定义

二、数组的顺序存储

2.1一维数组元素的存储位置

2.2二维数组元素的存储位置

2.3三维数组元素的存储位置

三、特殊矩阵的压缩存储

3.1相关概念

3.2对称矩阵

3.3三角矩阵

3.4对角矩阵(带状矩阵)

3.5稀疏矩阵


一、数组的定义

1.1概念

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

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

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

1.2抽象数据类型定义

ADT Array{

数据对象:j(i)=0,... b(i)-1, i=1,2,.....,n

                  D={a(j1j2....j(n)) | a(j1j2.....j(n)) ∈ElemSet}

数据关系:R1={<a(j1...j(i)...j(n),a(j1...j(i+1)...j(n))> | 0<=j(k)<=b(k)-1,1<=k<=n,且k≠i,0<=j(i)<=b(k)-2, a(j1...j(i)...j(n)), a(j1...j(i+1)...j(n) ∈D,i=2,...,n}

基本操作:

①InitArray(&A,n,bound1,...boundn)   //构造数组A

②DestroyArray(&A)   //销毁数组A

③Value(A,&e,index1,...,indexn)   //取数组元素值

④Assign(A,&e,index1,...indexn)  //给数组元素赋值

}ADT Array

二、数组的顺序存储

2.1一维数组元素的存储位置

LOC(i)=LOC(0)=a,i=0;

LOC(i)=LOC(i-1)+L=a+i*L,i>0

例:每个元素占4字节,假设a[0]存储在2000单元,则a[3]地址为:2000+3*4=2012单元

 2.2二维数组元素的存储位置

我们先来讨论一下二维数组的存储方式:

①以行序为主序

②以列序为主序

二维数组元素的存储位置:(行优先的顺序存储)

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

(n*i+j)表示在a[i][j]前面所有元素个数

例:

2.3三维数组元素的存储位置

我们一样先讨论三位数组的存储方式:

三位数组元素的存储位置

三、特殊矩阵的压缩存储

3.1相关概念

①什么是压缩存储:

为多个相同的非零元素只分配一个存储空间;对零元素不分配空间。

②什么样的矩阵能够压缩:

对称矩阵、对角矩阵、三角矩阵、稀疏矩阵

③什么叫稀疏矩阵:

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

3.2对称矩阵

①特点:a(ij)=a(ji)

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

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

例:以行序为主序存储下三角

k表示元素a(ij)前面有几个元素个数

k=1+2+3+4+...+(i-1)+(j-1) (i-1表示a(ij)前面有i-1行,j-1表示在a(ij)本行前面有几个元素)

以a(n1)为例:k=1+2+3+...+(n-1)+(1-1)=n(n-1)/2

3.3三角矩阵

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

②存储方法:重复元素c共享一个元素存储空间,共占用n(n+1)/2+1个元素(1表示常数c的存储空间)

③存储结构:将元素存放在一个一维数组sa[n(n+1)/2+1]中

·对于上三角矩阵:

·对于下三角矩阵:

k一样表示a(ij)元素前面的元素个数

3.4对角矩阵(带状矩阵)

①特点:在n×n方阵中所有非零元素都集中在以主对角线为中心的带状区域中,区域外的值全为0

常见的有三对角矩阵、五对角矩阵、七对角矩阵等

②存储方法:以对角线的顺序存储

3.5稀疏矩阵

①特点:非零元较零元少,且分布没有规律。

②存储方法:三元组法、十字链表

③存储结构:顺序存储、链式存储

·三元组顺序表法

(i,j,a(ij)) (行数,列数,元素值)+(总行数,总列数,非零元素总个数)

三元组法的优点:便于进行依行顺序处理的矩阵运算;缺点:不能随机存取。

改进:稀疏矩阵的链式存储结构——十字链表

优点:能够灵活地插入因运算而产生的新的非零元素,删除因运算而产生的新的零元素

·十字链表

矩阵的每一个非零元素用一个结点表示,该结点除了(row,col,value)以外,还要有right、down两个域。(right连接同一行中的下一个非零元素,down连接同一列中的下一个非零元素)

结构示意图:

例:

引入头指针:指向行或列中的第一个非零元素

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

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

相关文章

【机器学习300问】102、什么是混淆矩阵?

一、混淆矩阵的定义 混淆矩阵是一种用于评估分类模型性能的评估指标。当模型对数据进行预测并将数据分配到预定义的类别时&#xff0c;混淆矩阵提供了一种直观的方式来总结这些预测与数据实际类别之间的对应关系。具体来说&#xff0c;它是一个表格。 二、分类模型性能评估一级…

js setTimeout、setInterval、promise、async await执行顺序梳理

基础知识 async: 关键字用于标记一个函数为异步函数&#xff0c;该函数中有一个或多个promise对象&#xff0c;需要等待执行完成后才会继续执行。 await:关键字&#xff0c;用于等待一个promise对象执行完&#xff0c;并返回其中的值&#xff0c;只能在async函数内部使用。可…

云服务器平台AutoDL--基本介绍与使用感受

因为课程作业需要复现DreamBooth&#xff0c;找了几个教程之后&#xff0c;发现了AutoDL这个好东西&#xff0c;芜湖~ 相关概念 以下回答来自于ChatGPT。 云计算平台&#xff1a;云服务器平台是提供按需计算资源和服务的在线平台&#xff0c;通常包括存储、处理能力、数据库、…

System32文件夹千万不能删除,看完这篇你就知道为什么了

序言 C:\Windows\System32目录是Windows操作系统的关键部分,重要的系统文件存储在该目录中。网上的一些恶作剧者可能会告诉你删除它,但你不应该尝试去操作,如果你尝试的话,我们会告诉你会发生什么。 什么是System32文件夹 位于C:\Windows\System32的System32文件夹是所有…

【代码随想录】面试常考类型之动态规划01背包

前言 更详细的在大佬的代码随想录 (programmercarl.com) 本系列仅是简洁版笔记&#xff0c;为了之后方便观看 不同的二叉搜索树 96. 不同的二叉搜索树 - 力扣&#xff08;LeetCode&#xff09; 通过举例子发现重叠子问题 代码很简单&#xff0c;主要是思路问题&#xff0…

Windows内核函数 - 创建关闭注册表

在驱动程序的开发中&#xff0c;经常会用到对注册表的操作。与Win32的API不同&#xff0c;DDK提供另外一套对注册表操作的相关函数。首先明确一下注册表里的几个概念&#xff0c;避免在后面混淆。 图1 注册表概念 有5个概念需要重申一下&#xff1a; * 注册表项&#xff1a; 注…

unity接入live2d

在bilibili上找到一个教程&#xff0c;首先注意一点&#xff0c;你直接导入那个sdk&#xff0c;并且打开示例&#xff0c;显示的模型是有问题的&#xff0c;你需要调整模型上脚本的一个枚举值&#xff0c;调整它的渲染顺序是front z to我看教程时候&#xff0c;很多老师都没有提…

Android Compose 九:interactionSource 的使用

先上官方文档 InteractionSource InteractionSource represents a stream of Interactions corresponding to events emitted by a component. These Interactions can be used to change how components appear in different states, such as when a component is pressed or…

温故而知新-Spring篇【面试复习】

温故而知新-Spring篇【面试复习】 前言版权推荐温故而知新-Spring篇IOCAOP循环依赖springboot如果要对属性文件中的账号密码加密如何实现&#xff1f;SpringBoot的优点Spring Boot 的核心注解是哪个&#xff1f;它主要由哪几个注解组成的&#xff1f; 最后 前言 2023-7-31 15:…

Java RMI

RMI - 安全篇 RMI分为三个主体部分&#xff1a; *Client-客户端*&#xff1a;客户端调用服务端的方法 *Server-服务端*&#xff1a;远程调用方法对象的提供者&#xff0c;也是代码真正执行的地方&#xff0c;执行结束会返回给客户端一个方法执行的结果。 *Registry-注册中心…

python双色球选号程序的实现与解析

新书上架~&#x1f447;全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我&#x1f446;&#xff0c;收藏下次不迷路┗|&#xff40;O′|┛ 嗷~~ 目录 一、引言&#xff1a;双色球选号游戏的魅力 二、程序设计与实现 1. 生成红色球号码 2. 生…

3.游戏中自定义数据类型的解读分析

知识来源于腾讯课堂易道云 结构的解释&#xff1a; 计算机里的所有东西都是用二进制表示的&#xff0c;二进制是数字&#xff0c;我们用的阿拉伯数字0-9这个数字是十进制&#xff0c;计算机用的是二进制只有0或1&#xff0c;然后都是一堆0或1的数字&#xff0c;游戏中怎么把这…

AD使用问题

设计流程&#xff1a; 1.先创建项目——添加原理图&#xff0c;原理图库&#xff0c;PCB&#xff0c;PCB库 2.画原理图库和封装库 主要有三种方法&#xff1a; &#xff08;1&#xff09;手动画库和封装&#xff0c;常常用于嘉立创查询不到的器件 &#xff08;2&#xff0…

双机多网口配置同网段地址,可以通过目的IP确定接收数据的网卡吗?

环境 两台机器两网卡同网段接入同一个二层交换机。 机器A ens38 00:0c:29:a4:8b:fb 10.0.0.11/24 ens39 00:0c:29:a4:8b:05 10.0.0.12/24 机器B ens38 00:0c:29:4f:a6:c4 10.0.0.21/24 ens39 00:0c:29:4f:a6:ce 10.0.0.22/24 初始ARP表 只有管理口接口的ARP表项&#xff0c…

浙江大学数据结构MOOC-课后习题-第十讲-排序4 统计工龄

题目汇总 浙江大学数据结构MOOC-课后习题-拼题A-代码分享-2024 题目描述 测试点 思路分析 这道题很明显就是利用桶排序的思路 受到课程内容的影响&#xff0c;我一开始是想着建立一个链表数组&#xff0c;数组内每个元素下方都存放链表&#xff0c;最后再遍历统计输出。 但是&…

【华为OD机试-C卷D卷-200分】反射计数(C++/Java/Python)

【华为OD机试】-(A卷+B卷+C卷+D卷)-2024真题合集目录 【华为OD机试】-(C卷+D卷)-2024最新真题目录 题目描述 给定一个包含 0 和 1 的二维矩阵。 给定一个初始位置和速度,一个物体从给定的初始位置出发,在给定的速度下进行移动,遇到矩阵的边缘则发生镜面发射。 无论物体…

Android和flutter交互,maven库的形式导入aar包

记录遇到的问题&#xff0c;在网上找了很多资料&#xff0c;都是太泛泛了&#xff0c;使用后&#xff0c;还不能生效&#xff0c;缺少详细的说明&#xff0c;或者关键代码缺失&#xff0c;我遇到的问题用红色的标注了 导入aar包有两种模式 1.比较繁琐的&#xff0c;手动将aar…

The Sandbox DAO:投票决定元宇宙的未来!

赋予用户治理权&#xff0c;打造由社群运营的开放式数码国度 随着The Sandbox DAO的启动&#xff0c;我们邀请全球社群——这个新数字国度的公民们——提出建议并参与治理&#xff0c;共同塑造开放元宇宙的未来。 介绍 在The Sandbox&#xff0c;我们正在建立一个开放的元宇宙…

opencv c++编程基础

1、图片的本质 图像在 OpenCV 中的本质 在 OpenCV 中&#xff0c;图像被表示为一个多维数组&#xff0c;其中每个元素对应于图像中的单个像素。图像的维度取决于其通道数和像素数。 **通道数&#xff1a;**图像可以有多个通道&#xff0c;每个通道存储图像的不同信息。例如&…

李廉洋:5.22黄金原油高位震荡,今日最新行情分析策略。

黄金消息面分析&#xff1a;根据4月份的通胀数据&#xff0c;加拿大央行6月5日降息应该是“理所当然的”。加拿大的整体通货膨胀率在4月份降至2.7%&#xff0c;为自2021年初以来的最低水平&#xff0c;核心CPI中加拿大央行的两项首选数据均降至3%以下。加拿大央行在决定降息之前…