数据结构-二维数组-存储结构

数据结构-二维数组存储结构

一、随机访问地址计算

前情提要:

下文中说到的地址,在c语言和c++语言里叫指针,与现实生活中每个家庭都有家庭地址一样类似的概念,但是真正细究起来,c语言和c++语言里的地址和真实的主存地址,也就是物理地址又是不一样的,主要原因是有一个计算机操作系统管理着你写的程序具体在哪一个物理内存块,所以c语言和c++语言里的地址也叫做虚拟地址,虚拟地址到物理地址映射是操作系统的内存管理实现的,这里说起来又是一堆的话。

两种存储方式

数组具有随机访问特点,要求能够依据下标计算出任一数组元素的存储地址(概念上的地址):
计算机主存的每个地址和存储内的每个字节是一一对应的,而每个字节间的排列顺序是线式的。在计算元素地址之前需要了解二维数组的两种存储方式:
二维数组具有两种存储方式:

1、以行为主顺序优先存储:

这里写图片描述
因为 aij 是二维数组中第 i 行,第j列的元素,第 (i1) 行共 (i1)n 个元素,在第 i 行中前面已经存放了(j1)个元素,故在 aij 前面共放了 (i1)n+(j1) 个元素;
令每个元素占用空间 e 个单位
以第一个a11的地址address( a11 )为基地址可以得到:

address(aij)=address(a11)+((i1)n+(j1))e

如果以任意的 A[c1..d1,c2..d2] (其中 c1c2 表示基地址元素; d1c1+1d2c2+1 表示数组的行数和列数)可得:

address(aij)=address(ac1c2)+((ic1)(d2c2+1)+(jc2))

2、以列为主顺序优先存储:

这里写图片描述

因为 aij 是二维数组中第 i 行,第j列的元素,第 (j1) 列共 (j1)m 个元素,在第 i 行中前面已经存放了(i1)个元素,故在 aij 前面共放了 (j1)m+(i1) 个元素;
令每个元素占用空间 e 个单位
以第一个a11的地址address( a11 )为基地址可以得到:

address(aij)=address(a11)+((j1)m+(i1))e

如果以任意的 A[c1..d1,c2..d2] (其中 c1c2 表示基地址元素; d1c1+1d2c2+1 表示数组的行数和列数)可得:

address(aij)=address(ac1c2)+((jc2)(d1c1+1)+(ic1))

以上就是对数组的顺序存储两种方法介绍,初写理论文章大牛勿喷,多多指教哈

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

majinshanNUN

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值