多维数组地址映射问题的求解(3维、4维为例)——数据结构

news2024/12/23 18:24:27

 在上篇我大概介绍了多维数组的地址映射问题,但是不够完善,很多朋友还没有彻底学会,表示很头疼。这一方面的总结确实比较少,而且也很麻烦,但是不要怕,看完我的总结,相信你一定会有一直醍醐灌顶的感觉,这期也将作为上期的一个补充,以三维和四维数组为例,解决实际题目中的问题。

多维数组存储地址计算问题的求解——数据结构_追逐太阳的星星的博客-CSDN博客

 上边是关于上篇的一些总结,没有看过的同学可以大概看一下,喜欢的话记得点赞支持哦!

那么废话不多说,我们直接讲干货!

二维数组

我们先来了解一下二维数组的规律

例1.设二维数组A[1...m,1...n](即m行n列)按行存储在数组B[1...m*n]中,则二维数组
素A[i,j]在一维数组B中的下标为( )。【南京理工大学1998 一、2(2分)】
A. (i-1)*n+j
B. (i-1)*n+j-1
C.i*(j-1)
D.j*m+i-1

[解析]:

 易得如下结论

行优先存储二维数组素A[i,j]在一维数组B中的下标为:(i-1)*n+j,即:已经存满的行数(i-1)乘以列的总数n,再加上未存满的那一行对应的已经存满的列数j。

列优先存储二维数组素A[i,j]在一维数组B中的下标为:(j-1)*m+i,即:已经存满的列数(j-1)乘以行的总数m,再加上未存满的那一列对应的已经存满的行数i。

三维数组

例2.使用行优先次序存放三维数组A(8,10,20),每个数组元素占4个内存单元,假设数组元素A[0,0,0]的起始存储地址是100,计算数组元素A[7,8,9]的储地址

[解析]:

 如图所示,表示的是三维数组的存储结构,黄色区域代表满,三维数组的前7行均满,存了7×10×20=1400个元素,三维数组第8行存满了8个二维数组、9个一维数组(此处未包含下标为9处的元素),对应的元素个数分别为:8×20=160、9,共计1400+160+9=1569个元素,每个元素占4个存储单元,1569×4=6276,又因为起始位置为100,6276+100=6376,故本题答案为6376。

例3.三维数组a[4][5][6](下标从0开始计,a有4*5*6个元素)中每个元素的长度是2,则a[2][3][4]的地址是______。(设a[0][0][0]的地址是1000,数据以行为主方式存储。)【南京理工大学2000二、11(1.5分)】

[解析]:(2×5×6+3×6+4)×2+1000=1164,本题答案为1164。

例4.数组A[1...10,-2...6,2...8] 以列优先的顺序存储,设第一个元素的首地址是100,每个元素占3个存储长度的存储空间,则元素A[5,0,7]的存储地址为_____。

注意:按列存储与按行存储稍有不同,按行存储为行、列、页的顺序计算,而按列存储需要按照页、列、行的顺序来计算,两者刚好相反,2维、3维、4维均适用。

 [解析]:

 (6×9×10+2×10+4)×3+100=1522,本题答案为1522。

四维数组

例5.设四维数组B=[1...3,2...8,1...5,1...8],每个数据元素占一个存储单元,且行优先存储时B[1,2,2,3]的存储地址为2000,分别计算出B[2,4,4,6]按行优先存储和按列优先存储的存储地址。

[解析]:

​​​​​​​先计算初始地址:2000-(8+3)=1989

按行优先存储:(1×7×5×8+2×5×8+3×8+6)+1989=2379

按列优先存储:(5×5×7×3+3×7×3+2×3+2)+1989=2585

以上是我的个人总结,如有错误,望大家指正!如果对你有帮助的话记得点赞呦,另外如果大家有数据结构方面不会的可以私信我,我不忙的时候会写文章给大家解答的!谢谢大家支持!

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

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

相关文章

《2022中国PaaS市场研究及选型评估报告》正式发布

《中智观察》第1741篇推送作者:海比研究院编辑:晓晓编审:赵满头图来源:中国软件网从2006年概念兴起至今,云计算已经在国内走过整整十五年的历程。云计算的三大模式SaaS、PaaS、IaaS从陌生到熟悉,从研发到应…

ML Journal6—OpenCV中的GUI功能

图像入门这是将在本教程中使用的图像borz.jpgimport cv2 as cv import sysimg cv.imread(borz.jpg) if img is None:sys.exit("Could not read the file.") cv.imshow("Display Window", img) k cv.waitKey(0) if k ord("s"):cv.imwrite(&quo…

《自己动手写CPU》学习记录(5)——第5章/Part 1

目录 引言 致谢 流水线的数据相关问题 问题分析 RAW类型 1、相邻指令数据相关 2、间隔1条指令数据相关 3、间隔2条指令数据相关 修改后的代码 译码模块 指令执行模块 顶层模块 测试 测试代码 生成.data初始化文件 仿真结果 引言 随章节进度继续推进&#xff0c…

【视频】马尔可夫链原理可视化解释与R语言区制转换MRS实例|数据分享

原文链接:http://tecdat.cn/?p12280马尔可夫链是从一个“状态”(一种情况或一组值)跳到另一个“状态”的数学系统。本文介绍了马尔可夫链和一种简单的状态转移模型,该模型构成了隐马尔可夫模型(HMM)的特例…

近期方案研究总结(那些你用的到的排列组合)

方案一 这个方案只一个位置一个号码,标的物即一个位置八十期不重即可以切入,以这样的思路去进行扩充。 纬度一 两期重复形态为:11、22、33、44、55、66、77、88、99、1010。 数上升一形态为:12、23、34、45、56、67、78、89、910…

微服务框架 SpringCloud微服务架构 28 数据同步 28.6 测试同步功能

微服务框架 【SpringCloudRabbitMQDockerRedis搜索分布式,系统详解springcloud微服务技术栈课程|黑马程序员Java微服务】 SpringCloud微服务架构 文章目录微服务框架SpringCloud微服务架构28 数据同步28.6 测试同步功能28.6.1 直接开干28 数据同步 28.6 测试同步…

云安全系列5:2023 年需要了解的 40个云安全术语

云安全具有广泛而复杂的特点,它有许多特定的术语和首字母缩略词。我们在这里整理了一些云安全术语。将其用作指南,可帮助您了解云安全的细微差别并更便于学习相关内容。 Agent 代理是专门的软件包或应用程序,部署到设备或机器上以完成与安全…

IDEA:Idea 集成 EasyYApi 插件实现接口文档的生成与更新

我是 ABin-阿斌:写一生代码,创一世佳话,筑一览芳华。如果小伙伴们觉得不错就一键三连吧~ 声明:文章原文来源处: https://blog.csdn.net/weixin_40863968/article/details/122432678https://www.jianshu.com/p/cd91590…

10个知识点让你读懂Spring MVC容器

DispatcherServlet 的配置参数 可以通过的属性指定配置参数: namespace参数:DispatcherServlet对应的命名空间,默认是WEB-INF/-servlet.xml。在显式配置该参数后,新的配置文件对应的路径是WEB-INF/.xml,例如如果将name…

Android 移植iperf3.13 测试网络

iperf,测试网络性能的,不同于 webrtc里面的gcc 算法预估网络带宽,iperf是实际占用网络来传输数据测量实际的网络性能。 官网:https://iperf.fr/ 官方就有 android 的下载 https://iperf.fr/iperf-download.php#android, 但是看起…

绕线机算法模型(Simulink仿真验证+PLC代码实现)

绕线机应用的详细内容大家可以参看下面这篇博客,这里不再赘述。本文主要借助Simulink仿真分析和解决工程实际问题。希望对大家学习Simulink有所帮助。限于水平和能力所限,文中难免出现错误和不足之处,诚恳的希望大家批评和指正。 S7-200 SMART PLC和V20变频器绕线机控制应用…

Linux(在 Linux 上搭建 java 部署环境(安装jdk/tomcat/mysql) + 将程序部署到云服务器上的操作)

目录 🐲 1. 在 Linux 上搭建 java 部署环境 🦄 1.1 安装 jdk 🦄 1.2 安装 tomcat 🦄 1.3 安装 mysql 🐲 2. 将[博客系统]部署到云服务器上 🦄 2.1 先在云服务器上,创建和之前 windows 上一样的数据库…

德勤、阿里为数据智能时代造势,是风口还是韭菜?

前不久,德勤和阿里高调发布了业内首个DAAS报告《DAAS数字化新世代的最优解》,强调“企业不应该继续将数据智能建设当作‘选择题’,而是一道‘必答题’!” 德勤管理咨询中国首席执行官戴耀华(右)与阿里巴巴集…

自学编程技术如何选择书籍?

首先自学编程的话,也是要先确定要选择适合自己的编程语言。然后再购买相应的编程教材,不知道怎么选择的话,可以直接选择黑马的原创书籍。 《C语言开发基础》 内容简介 本书是对《C语言开发入门教程》一书的全新改版,本次改版结合…

智能驾驶穿越“寒冬”:Argo AI们倒下,复睿智行们崛起

作者 | 曾响铃 文 | 响铃说(xiangling0815) 寒气还在智能驾驶领域蔓延。 在过去的一段时间,裁员、倒闭、破产、市值下跌、巨头撤离等等一系列不好的消息在智能驾驶行业频频爆出,一批老牌的智能驾驶企业更是倒在了黎明前。 智能…

OpenCV实战——实现高效图像扫描循环

OpenCV实战——实现高效图像扫描循环0. 前言1. 测量代码运行时间2. 计算不同扫描算法的执行时间4. 完整代码及运行结果相关链接0. 前言 在《像素操作》一节中,我们介绍了扫描图像以处理其像素的不同方法。在本节中,我们将学习比较这些方法的计算效率。编…

Linux篇 一、香橙派Zero2设置开机连接wifi

香橙派Zero2系列文章目录 一、香橙派Zero2设置开机连接wifi 文章目录香橙派Zero2系列文章目录前言一、调试串口的连接说明二、WIFI 连接测试1.首先使用 nmcli dev wifi 命令扫描周围的 WIFI 热点2.找到自己的wifi,准备好wifi名称和密码三、设置开机连接WiFi总结前言…

【MySQL】第10章_创建和管理表

创建和管理表1. 基础知识1.1 一条数据存储的过程1.2 标识符命名规则1.3 MySQL中的数据类型2. 创建和管理数据库2.1 创建数据库2.2 使用数据库查看当前所有的数据库查看当前正在使用的数据库查看指定库下所有的表查看数据库的创建信息使用/切换数据库2.3 修改数据库更改数据库字…

RadZen 最新注册版,2022年末圣诞-happy

RadZen快速简单地生成业务 Web 应用程序,以可视化方式构建和启动 Web 程序,而我们会为您创建新代码。 从信息开始 连接到数据库。Radzen 推断您的信息并生成功能完备的 Web 应用程序。支持 MSSQL REST 服务。 微调添加页面或编辑生成的页面。通过预览您…

vue使用高德地图,marker低于1000,滑动卡顿问题的探究(已解决)

问题描述 vue使用高德地图点标记,刚开始使用的是Marker,但是数目超过300,滑动就卡顿,按文档来说,Marker 类型推荐在数据量为 500 以内时使用,不应该卡顿。后边就开始对这个bug进行两天脑秃的探究了 1.换成…