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

news2024/11/17 20:41:46

目录

一、数组的定义

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.coloradmin.cn/o/1708301.html

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

相关文章

Java 数据类型:学习和区分Java的基本数据类型(如int、float、boolean等)和引用数据类型(如数组、类等)

Java数据类型 Java是一种强类型语言&#xff0c;所有变量在使用前都必须声明其类型。Java的数据类型分为基本数据类型&#xff08;Primitive Data Types&#xff09;和引用数据类型&#xff08;Reference Data Types&#xff09;。了解并区分这两类数据类型是学习Java编程的重…

PC网游、页游、手游、端游各类游戏收集整理大集合-90%以上游戏带视频架设教程

本游戏资源提供给大家学习及参考研究借鉴美工之用&#xff0c;请勿用于商业和非法用途&#xff0c;无任何技术支持&#xff01; 干货列表

如何将RK R75键盘的右Alt键改为Ctrl键

打开注册表地址栏中输出 计算机\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout右键新建二进制值&#xff0c;名称设为ScanCode Map按下图输入数值

什么是知识中台?为什么企业需要知识中台?

如今市面上的企业数不胜数&#xff0c;企业的任何一个小细节都会产生很大的影响。近几年来一直很热门的知识中台备受企业关注。关于如何高效地管理、整合和运用知识&#xff0c;成为了每一家企业都在重点关注的问题。而知识中台&#xff0c;就是为了解决这一问题而诞生的一个全…

软件功能测试的类型和流程分享

在现代社会&#xff0c;软件已经成为人们生活中不可或缺的一部分&#xff0c;而在软件的开发过程中&#xff0c;功能测试是不可或缺的环节。软件功能测试指的是对软件系统的功能进行检查和验证&#xff0c;以确保软件在各种情况下能够正常运行&#xff0c;并且能够按照用户需求…

【设计模式】JAVA Design Patterns——Circuit Breaker(断路器模式)

&#x1f50d;目的 以这样一种方式处理昂贵的远程服务调用&#xff0c;即单个服务/组件的故障不会导致整个应用程序宕机&#xff0c;我们可以尽快重新连接到服务 &#x1f50d;解释 真实世界例子 想象一个 Web 应用程序&#xff0c;它同时具有用于获取数据的本地文件/图像和远程…

车载网络测试实操源码_使用CAPL脚本模拟发送符合协议要求(Counter和CRC)的CAN报文

系列文章目录 车载网络测试实操源码_使用CAPL脚本解析hex、S19、vbf文件 车载网络测试实操源码_使用CAPL脚本对CAN报文的Counter和CRC进行实时监控 车载网络测试实操源码_使用CAPL脚本模拟发送符合协议要求(Counter和CRC)的CAN报文 车载网络测试实操源码_使用CAPL脚本实现安全…

如何在Spring Boot中整合PageHelper实现分页功能

1.前言 在开发web应用程序时&#xff0c;经常会遇到需要对数据库中的数据进行分页查询的情况。为了简化分页查询的实现过程&#xff0c;我们可以利用PageHelper这个优秀的分页插件来实现分页功能。本文将介绍如何在Spring Boot项目中整合PageHelper&#xff0c;并演示如何使用它…

docker和containerd的区别

docker和containerd的区别 1、容器运行时 1.1 容器运行时概念 容器运行时&#xff08;Container Runtime&#xff09;是一种负责在操作系统层面创建和管理容器的软件工具或组件。它是容器化技术的核心组件之一&#xff0c;用于在容器内部运行应用程序&#xff0c;并提供隔离…

零基础,想做一名网络安全工程师,该怎么学习?

​ 相比IT类的其它岗位&#xff0c;网络工程师的学习方向是比较明亮的。想要成为网络工程师&#xff0c;华为认证就是最好的学习方法。而网络工程师的从零开始学习就是从华为认证的初级开始学起&#xff0c;也就是HCIA&#xff0c;也就是从最基本的什么是IP地址、什么是交换机这…

IDEA2024创建maven项目

1、new->project 2、创建后展示 3、生成resources文件夹 4、测试--编写一个hello文件

STM32——定时器

一、简介 *定时器可以对输入的时钟进行计数&#xff0c;并在计数值达到设定值时触发中断 *16位计数器、预分频器、自动重装寄存器的时基单元&#xff0c;在72MHz计数时钟下可以实现最大59.65s的定时 *不仅具备基本的定时中断功能&#xff0c;而且还包含内外时钟源选择、输入…

Autosar Dcm配置-特定NRC实现方式-基于ETAS软件

文章目录 前言工具配置代码编写总结 前言 项目开发过程中&#xff0c;诊断服务一般客户需求或系统需求都会有特定NRC(一般为NRC22-条件不满足)&#xff0c;也就会有特定的条件&#xff0c;需要手动加代码实现。本文介绍ETAS工具中配置的接口及简单实现。 工具配置 对于每一个…

Redis常用命令——Hash篇

前面我们讲述了String的相关操作命令。本篇文章主要讲解Redis中数据结构Hash的相关操作命令。希望会对你有所帮助。 目录 一、Hash哈希 二、命令 HSET HGET HEXISTS HDEL HKEYS HVALS HGETALL HMGET HLEN HSETNX HINCRBY 和 HINCRBYFLOAT 三、小结 &#x1f64b;‍♂️ 作者&a…

css 渐变色边框

效果图&#xff1a; 代码&#xff1a; <style>:root{--br-radius: 12px;}.list{position: relative;}.list_tle{margin-top: 15px;margin-bottom: 5px;}.item{position: relative;display: inline-flex;} .br1 {padding: 10px 16px;clip-path: inset(0 round 6px);borde…

【C++】挑战与机遇并存的编程语言—前序

C&#xff1a;挑战与机遇并存的编程语言 一、C的难点与挑战二、C的学习方法与策略三、C的实战应用与代码实例 在当今科技飞速发展的时代&#xff0c;编程语言的选择对于每一个开发者来说都至关重要。C&#xff0c;作为一种历史悠久且功能强大的编程语言&#xff0c;一直在软件开…

el-date-picker限制时间选择,不能选择当前日期之后时间

要求&#xff1a;时间选择不能超过当前日期之后的 效果&#xff1a; 结构代码&#xff1a;&#xff1a; <el-form-item label"时间&#xff1a;"><el-date-pickerv-model"time"type"datetimerange"range-separator"至"start…

【算法】重建二叉树并进行后序遍历的Java实现

人不走空 &#x1f308;个人主页&#xff1a;人不走空 &#x1f496;系列专栏&#xff1a;算法专题 ⏰诗词歌赋&#xff1a;斯是陋室&#xff0c;惟吾德馨 目录 &#x1f308;个人主页&#xff1a;人不走空 &#x1f496;系列专栏&#xff1a;算法专题 ⏰诗词歌…

做抖店如何避免被同行内卷?这5点建议,可以解决这个问题

我是王路飞。 都说2024年的抖店不赚钱了&#xff0c;商家太多了&#xff0c;太内卷了&#xff0c;一点都不好做~ 那为什么依然有很多商家在坚持做呢&#xff1f;为什么依然有很多新手入局呢&#xff1f; 无非是抖店确实能带来可观的利润回报罢了。 那如何避免被同行内卷呢&…

Linux-应用编程学习笔记(二、文件I/O、标准I/O)

一、文件I/O基础 文件 I/O 指的是对文件的输入/输出操作&#xff0c;就是对文件的读写操作。Linux 下一切皆文件。 1.1 文件描述符 在 open函数执行成功的情况下&#xff0c; 会返回一个非负整数&#xff0c; 该返回值就是一个文件描述符&#xff08;file descriptor&#x…