我是靠谱客的博主 天真芒果,最近开发中收集的这篇文章主要介绍数据结构 || 二维数组按行存储和按列存储,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

问题描述

    设有数组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

 

最后

以上就是天真芒果为你收集整理的数据结构 || 二维数组按行存储和按列存储的全部内容,希望文章能够帮你解决数据结构 || 二维数组按行存储和按列存储所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(48)

评论列表共有 0 条评论

立即
投稿
返回
顶部