多维数组的定义和存储
2015-08-14 00:47
411 查看
多维数组和广义表是一种复杂的非线性结构,它们的逻辑特征是:一个数据元素可能有多个直接前驱和多个直接后继。
多维数组
1、数组(向量)——常用数据类型
一维数组(向量)是存储于计算机的连续存储空间中的多个具有统一类型的数据元素。
同一数组的不同元素通过不同的下标标识。
(a1,a2,…,an)
2、二维数组
二维数组Amn可视为由m个行向量组成的向量,或由n个列向量组成的向量。
![](http://img.ph.126.net/C-Qi1dzqZPybxXnXcAlTyw==/2695685851974867822.jpg)
二维数组中的每个元素aij既属于第i行的行向量,又属于第j列的列向量。
3、多维数组
三维数组Amnp可视为以二维数组为数据元素的向量。四维数组可视为以三维数组为数据元素的向量……
三维数组中的每个元素aijk都属于三个向量。四维数组中的每个元素都属于四个向量……
4、数组的顺序存储方式
由于计算机内存是一维的,多维数组的元素应排成线性序列后存人存储器。
数组一般不做插入和删除操作,即结构中元素个数和元素间关系不变化。一般采用顺序存储方法表示数组。
(1)行优先顺序
将数组元素按行向量排列,第i+1个行向量紧接在第i个行向量后面。
【例】二维数组Amn的按行优先存储的线性序列为:
a11,a12,…,a1n,a21,a22,…,a2n,……,am1,am2,…,amn
注意:
①PASCAL和C语言中,数组按行优先顺序存储。
②行优先顺序推广到多维数组,可规定为先排最右的下标。
(2)列优先顺序
将数组元素按列向量排列,第i+1个列向量紧接在第i个列向量后面。
【例】二维数组Amn的按列优先存储的线性序列为:
a11,a21,…,am1,a12,a22,…,am2,……,a1n,a2n,…,amn
注意:
①FORTRAN语言中,数组按列优先顺序存储。
②列优先顺序推广到多维数组,可规定为先排最左的下标。
5、数组元素的地址计算公式
(1)按行优先顺序存储的二维数组Amn地址计算公式
LOC(aij)=LOC(a11)+[(i-1)×n+j-1]×d
其中:
①LOC(a11)是开始结点的存放地址(即基地址)
②d为每个元素所占的存储单元数
③由地址计算公式可得,数组中任一元素可通过地址公式在相同时间内存取。即顺序存储的数组是随机存取结构。
(2)按列优先顺序存储的二维数组Amn地址计算公式
LOC(aij)=LOC(a11)+[(j-1)×m+i-1]×d
(3)按行优先顺序存储的三维数组Amnp地址计算公式
LOC(aijk)=LOC(a111)+[(i-1)×n×p+(j-1)×p+k-1]×d
(4)下界不为1的二维数组的地址计算公式
①二维数组A[c1..d1,c2..d2]的地址计算公式:
LOC(aij)=LOC(ac1c2)+[(i-c1)×(d2-c2+1)+j-c2]×d
②下界为0的二维数组的地址计算公式(C语言中使用)
LOC(aij)=LOC(a00)+[i×(d2+1)+j]×d
注意:
以下讨论的数组存储结构都以C语言下标表示。
多维数组
1、数组(向量)——常用数据类型
一维数组(向量)是存储于计算机的连续存储空间中的多个具有统一类型的数据元素。
同一数组的不同元素通过不同的下标标识。
(a1,a2,…,an)
2、二维数组
二维数组Amn可视为由m个行向量组成的向量,或由n个列向量组成的向量。
![](http://img.ph.126.net/C-Qi1dzqZPybxXnXcAlTyw==/2695685851974867822.jpg)
二维数组中的每个元素aij既属于第i行的行向量,又属于第j列的列向量。
3、多维数组
三维数组Amnp可视为以二维数组为数据元素的向量。四维数组可视为以三维数组为数据元素的向量……
三维数组中的每个元素aijk都属于三个向量。四维数组中的每个元素都属于四个向量……
4、数组的顺序存储方式
由于计算机内存是一维的,多维数组的元素应排成线性序列后存人存储器。
数组一般不做插入和删除操作,即结构中元素个数和元素间关系不变化。一般采用顺序存储方法表示数组。
(1)行优先顺序
将数组元素按行向量排列,第i+1个行向量紧接在第i个行向量后面。
【例】二维数组Amn的按行优先存储的线性序列为:
a11,a12,…,a1n,a21,a22,…,a2n,……,am1,am2,…,amn
注意:
①PASCAL和C语言中,数组按行优先顺序存储。
②行优先顺序推广到多维数组,可规定为先排最右的下标。
(2)列优先顺序
将数组元素按列向量排列,第i+1个列向量紧接在第i个列向量后面。
【例】二维数组Amn的按列优先存储的线性序列为:
a11,a21,…,am1,a12,a22,…,am2,……,a1n,a2n,…,amn
注意:
①FORTRAN语言中,数组按列优先顺序存储。
②列优先顺序推广到多维数组,可规定为先排最左的下标。
5、数组元素的地址计算公式
(1)按行优先顺序存储的二维数组Amn地址计算公式
LOC(aij)=LOC(a11)+[(i-1)×n+j-1]×d
其中:
①LOC(a11)是开始结点的存放地址(即基地址)
②d为每个元素所占的存储单元数
③由地址计算公式可得,数组中任一元素可通过地址公式在相同时间内存取。即顺序存储的数组是随机存取结构。
(2)按列优先顺序存储的二维数组Amn地址计算公式
LOC(aij)=LOC(a11)+[(j-1)×m+i-1]×d
(3)按行优先顺序存储的三维数组Amnp地址计算公式
LOC(aijk)=LOC(a111)+[(i-1)×n×p+(j-1)×p+k-1]×d
(4)下界不为1的二维数组的地址计算公式
①二维数组A[c1..d1,c2..d2]的地址计算公式:
LOC(aij)=LOC(ac1c2)+[(i-c1)×(d2-c2+1)+j-c2]×d
②下界为0的二维数组的地址计算公式(C语言中使用)
LOC(aij)=LOC(a00)+[i×(d2+1)+j]×d
注意:
以下讨论的数组存储结构都以C语言下标表示。
相关文章推荐
- QList类介绍
- hdoj 2242 考研路茫茫——空调教室 【无向图求边双联通 缩点 + 树形dp】
- UVA 10369 Arctic Network【最小生成树】
- leetcode#195-tenthline
- Poj 2253 Frogger【最小生成树(巧解)】
- 【Android 分享】ShareSDK微信分享详解
- Eplan PPE Pro-panel Electric fluid P8 2.4图文安装教程
- NAT(Network Address Translation)
- JQuery
- Swap Nodes in Pairs
- 第一篇文章
- 黑马程序员—-C语言入门十重奏之六相濡以沫
- python 导入自定义包 包机制
- hdu 4288(区间合并)
- LeetCode Excel Sheet Column Number
- Android drawable selector 设置无效
- LeetCode Excel Sheet Column Number
- Java学习-024-获取当前类名或方法名二三文
- Oracle_绑定变量窥探测试
- 核心技术-克隆(深拷贝)