数据结构 || 二维数组按行存储和按列存储[通俗易懂]
大家好,又见面了,我是你们的朋友全栈君。
问题描述:
设有数组A[n,m],数组的每个元素长度为3字节,n的值为1~8,m的值为1~10,数组从内存收地址BA开始顺序存放,请分别用列存储方式和行存储方式求A[5,8]的存储首地址为多少。
解题说明:
(1)为什么要引入以列序为主序和以行序为主序的存储方式?
因为一般情况下存储单元是单一的存储结构,而数组可能是多维的结构,则用一维数组存储数组的数据元素就存在着次序约定的问题,所以就有了以列序为主序和以行序为主序的存储方式。
(2)以列序为主序的存储方式的存储地址计算公式:
LOC(i,j) = LOC(0,0) + (m*(j-1)+(i-1))*L
LOC(i,j)是a(i,j)的存储位置; LOC(0,0)是a(0,0)的存储位置(即二维数组的起始存储位置,为称为基地址或基址);m是数组的总行数,L是单个数据元素占据的存储单元。
(2)以行序为主序的存储方式的存储地址计算公式:
LOC(i,j) = LOC(0,0) + (n*(i-1)+(j-1))*L
LOC(i,j)是a(i,j)的存储位置; LOC(0,0)是a(0,0)的存储位置(即二维数组的起始存储位置,为称为基地址或基址);n是数组的总列数,L是单个数据元素占据的存储单元。
解题过程:
行n=8,列m=10
(1)行优先
A[5,8] = A(0,0) + (m*(i-1)+(j-1))*L = BA + (10 * ( 5-1) + ( 8-1 )) * 3 = BA + 141
(2)列优先
A[5,8] = A(0,0) + (n*(j-1)+(i-1))*L = BA + (8 * ( 8-1) + ( 5-1 )) * 3 = BA + 180
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/160386.html原文链接:https://javaforall.cn
相关文章
- 磁盘和移动存储常用命令
- Mybatis调用PostgreSQL存储过程实现数组入参传递
- MySQL存储汉字的类型研究(mysql汉字类型)
- 设置MySQL存储路径:一步一步的指南(mysql设置存储路径)
- Redis极速存储数组数据(redis存数组)
- 优化数据存储:Oracle 分区压缩表(oracle分区压缩表)
- MySQL中存储和处理Byte数组(mysqlbyte数组)
- MySQL实现PHP数组存储的效果(mysql存储数组php)
- 轻松实现Linux卷扩容,提高存储灵活性(linux卷扩容)
- 调用Oracle存储过程的基本步骤(调用oracle存储过程)
- 如何使用 MSSQL 查看存储过程(mssql 查看存储过程)
- 使用数组循环存储redis(数组怎么循环存redis)
- MySQL有哪些引擎浅析MySQL的存储引擎(mysql一共有几种引擎)
- Vue快速连接Redis实现数据存储(vue 直连redis)
- 使用Redis瞬间加速存储(存储到redis的速度)
- 如何应用Redis存储数组(如何将数组存到redis)
- MySQL不支持中文存储解决方案(mysql 不能存入中文)
- 如何在MySQL中有效地存储和操作数组(mysql不能存储数组)
- 红色Redis改变网络存储模式(red redis)
- Redis中的数组存储方式(redis里存放数组)
- Redis缓存解决超大数组存储难题(redis缓存超大数组)
- PHP怎样调用MSSQL的存储过程