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

目录

一、数组的定义

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连接同一列中的下一个非零元素)

结构示意图:

例:

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

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

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

相关文章

HBase安装

安装HBase 提示&#xff1a;需要安装好hadoop和zookeeper 安装zookeeper可参考 一、确定HBase版本 去网站确认 https://hbase.apache.org/book.html#hadoop二、下载HBase安装包 去清华大学镜像站下载 https://mirrors.tuna.tsinghua.edu.cn/apache/hbase/三、安装HBase …

FTP协议——LightFTP安装(Linux)

1、简介 LightFTP是一个轻量级的FTP&#xff08;File Transfer Protocol&#xff0c;文件传输协议&#xff09;客户端软件。FTP是一种用于在网络上传输文件的标准协议&#xff0c;允许用户通过TCP/IP网络&#xff08;如互联网&#xff09;在计算机之间进行文件传输。 2、步骤…

运维笔记.Docker镜像分层原理

运维专题 Docker镜像原理 - 文章信息 - Author: 李俊才 (jcLee95) Visit me at CSDN: https://jclee95.blog.csdn.netMy WebSite&#xff1a;http://thispage.tech/Email: 291148484163.com. Shenzhen ChinaAddress of this article:https://blog.csdn.net/qq_28550263/artic…

10大领域应该怎么记?

文章目录 5大过程组10大领域49个过程输出输入工具与技术 参考文档&#xff1a; https://mp.weixin.qq.com/s/BJ-Dpn0zxTP0TCbeoJXb9A 5大过程组 启动、规划、执行、监控、收尾 10大领域 巧记&#xff1a;【挣饭进城市&#xff0c;咨购风菜干】【狗子整范进—成人风采】 整…

前端nvm、nodejs、npm、cnpm、yarn安装教程(超详细图文,含卸载旧的nodejs,安装及环境变量配置)

最近换了新电脑&#xff0c;一开始在网上找了一个教程让下载nvm-noinstall.zip 压缩包解压使用&#xff0c;踩坑了&#xff0c;过程复杂最后报错无法用。 后来搜到下文教程&#xff0c;直接使用nvm。exe进行安装&#xff0c;方便快捷。下面这个文章写的很详细&#xff0c;从如何…

SwiftUI中TabView(PageTabViewStyle的用法及无限滚动组件infinity carousel)

上一篇文章主要介绍了TabView的基本用法以及一些外观样式的设置&#xff0c;本篇文章主要介绍一下PageTabViewStyle样式下的TabView&#xff0c;该样式下的TabView允许用户整页滑动界面&#xff0c;在UIKit中我们用UIScrollView和UICollectionView制作滚动组件&#xff0c;本文…

家政项目day2 需求分析(模拟入职后熟悉业务流程)

目录 1 项目主体介绍1.1 项目背景1.2 运营模式1.3 项目业务流程 2 运营端需求2.1 服务类型管理2.2 服务项目&#xff08;服务&#xff09;管理2.3 区域管理2.4 区域服务管理2.5 相关数据库表的管理2.6 设计工程结构2.7 测试接口&#xff08;接口断点查看业务代码&#xff09; 1…

Java实现链表

链表 前言一、链表的概念及结构二、链表的分类三、链表的实现无头单向非循环链表实现无头双向链表实现具体代码 四、链表习题五、顺序表和链表的区别 前言 推荐一个网站给想要了解或者学习人工智能知识的读者&#xff0c;这个网站里内容讲解通俗易懂且风趣幽默&#xff0c;对我…

Autodesk Flame 2025 for Mac:视觉特效制作的终极利器

在数字时代&#xff0c;视觉特效已经成为电影、电视制作中不可或缺的一部分。Autodesk Flame 2025 for Mac&#xff0c;这款专为视觉特效师打造的终极工具&#xff0c;将为您的创作提供无尽的可能。 Autodesk Flame 2025 for Mac拥有强大的三维合成环境&#xff0c;能够支持您…

05.配置tomcat管理功能

认证失败&#xff0c;需要配置tomcat-users.xml文件 配置用户信息 [rootweb01 /application/tomcat/conf\]# tail tomcat-users.xml <role rolename"admin-gui"/> <role rolename"host-gui"/><role rolename"mana…

数学建模--LaTeX的基本使用

目录 1.回顾 2.设置这个页眉和页脚 3.对于字体的相关设置 4.对于这个分级标题的设置 5.列表的使用 6.插入图片 1.回顾 &#xff08;1&#xff09;昨天我们了解到了这个latex的使用基本常识&#xff0c;以及这个宏包的概念&#xff0c;区域的划分&#xff0c;不同的代码代…

PCL 法向量加权的RANSAC拟合分割平面

目录 一、算法原理1、原理概述2、主要函数二、代码实现三、结果展示四、相关链接本文由CSDN点云侠原创,原文链接。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的爬虫。 一、算法原理 1、原理概述

树与二叉树的概念介绍

一.树的概念及结构&#xff1a; 1.树的概念&#xff1a; 树是一种非线性的数据结构&#xff0c;它是由n&#xff08;n>0&#xff09;个有限结点组成一个具有层次关系的集合。把它叫做树是因为它看起来像一棵倒挂的树&#xff0c;也就是说它是根朝上&#xff0c;而叶朝下的 有…

IDEA 上方添加左右箭头按钮

IDEA 版本&#xff1a;2021.3.3 按钮&#xff1a; 左箭头&#xff08;Back&#xff09;&#xff08;快捷键&#xff1a;Ctrl Alt 左箭头&#xff09; 右箭头&#xff08;Forward&#xff09;&#xff08;快捷键&#xff1a;Ctrl Alt 右箭头&#xff09; 日常写代码中经常…

Java与GO语言对比分析

你是不是总听到go与java种种对比&#xff0c;其中在高并发的服务器端应用场景会有人推荐你使用go而不是 java。 那我们就从两者运行原理和基本并发设计来对比分析&#xff0c;看看到底怎么回事。 运行原理对比 java java 中 jdk 已经帮我们屏蔽操作系统区别。 只要我们下载并…

开源金融AI代理平台FinRobot;支持多翻译引擎和模式的高效浏览器翻译开源插件;使用自然语言控制生成视频的通用世界模型

✨ 1: finrobot FinRobot 是一个基于大语言模型的开源金融AI代理平台&#xff0c;适用于多种金融应用。 FinRobot是一个综合性的AI代理平台&#xff0c;超越了原有的FinGPT&#xff0c;旨在满足金融行业的多元化需求。它集成了各种AI技术&#xff0c;不仅仅局限于语言模型&am…

APM2.8飞控

ArduPilotMega 主控可应用于 固定翼、直升机、多旋翼、地面车辆 APM2.8飞控供电有两种 1.电流计供电&#xff0c; 2.带BEC&#xff08;稳压功能&#xff09;的电调供电 ArduPilotMega 内部的硬件结构图&#xff1a; 调试时&#xff0c;不要使用向导&#xff0c;由于向导功能不…

【JUC编程】-多线程和CompletableFuture的使用

多线程编程 文章目录 多线程编程[toc]引言创建多线程的方式继承Thread类实现Runnable接口实现Callable接口Callable和Runnable的区别 Lambda表达式 线程的实现原理Future&FutureTask具体使用submit方法Future到FutureTask类Future注意事项局限性 CompletionService引言使用…

【蓝桥杯——物联网设计与开发】拓展模块2 - 电位器模块

一、电位器模块 &#xff08;1&#xff09;资源介绍 &#x1f505;原理图 蓝桥杯物联网竞赛实训平台提供了一个拓展接口 CN2&#xff0c;所有拓展模块均可直接安装在 Lora 终端上使用&#xff1b; 图1 拓展接口 电位器模块电路原理图如下所示&#xff1a; 图2 …

通用代码生成器应用场景三,遗留项目反向工程

通用代码生成器应用场景三&#xff0c;遗留项目反向工程 如果您有一个遗留项目&#xff0c;要重新开发&#xff0c;或者源代码遗失&#xff0c;或者需要重新开发&#xff0c;但是希望复用原来的数据&#xff0c;并加快开发。 如果您的项目是通用代码生成器生成的&#xff0c;…