数组的定义与存储顺序

数组定义和运算

① 数组是高级语言一般都支持的数据类型,这里学习数组在计算机内部如何处理,主要是存取,地址计算;
② 从逻辑结构上看,数组可以看成是一般线性表的扩充。

二维数组视作线性表
① 把矩阵Am×n看成n个列向量的线性表:
A=(α1,α2…αj…αn),
αj=(a1j,a2j, …,amj),(1 ≤ j ≤ n)本身也是一个线性表,称为列向量。

②把矩阵Am×n看成m个行向量的线性表:
B=(β1,β2, ...βi…,βm),
βi = (ai1, ai2, …, aij, …, ain),(1 ≤ i≤ m)称为行向量。

高维数组
同理,嵌套(或降维)思路。
三维数组:每个元素为二维数组的线性表。
N维数据:每个元素为N-1维数据的线性表。

数组运算
① 数组是一组有固定个数的元素的集合。
维数、每维上下限确定,元素个数就确定,使得对数组的操作不象对线性表的操作那样,可以在表中任意一个合法的位置插入或删除一个元素。
② 数组操作一般只有两类:
取值:获得特定位置的元素值;
修改:修改特定位置的元素值。
PS:数组的抽象数据类型定义数组下标从1开始,与C语言不同。

数组的顺序存储和实现

数组的顺序存储结构有两种:
一种是按行序存储,如高级语言BASIC、COBOL、PASCAL和C语言都是以行序为主。
另一种是按列序存储,如高级语言中的FORTRAN语言就是以列序为主。

二维数组略(见前)。

三维数组:可行纵列为主序存储,如A3×4×2逻辑结构图:

在这里插入图片描述

数组地址计算:
元素地址 = 首元素地址 + 偏移量(与首距离)
偏移量 = 间隔元素个数 x size(单元素空间)

一维数组:
Loc(A[i])=Loc(A[i])+(i-1)*size.

二维数组:
行存储二维数组Am×n,下标从1开始,任意元素aij的地址
Loc[i,j]=Loc[1,1]+(n×(i-1)+j-1)×size,每个元素占size个存储单元,每个元素占1个存储单元 Loc[i,j]=Loc[1,1]+n×(i-1)+(j-1)

三维数组:
三维数组A(1..r,1..m,1..n)可以看成是r个m×n的二维数组。
在这里插入图片描述
假定每个元素占1个存储单元,行主序存放,首元素a111地址为Loc[1][1][1]
ai11地址:
Loc[i][1][1] = Loc[1][1][1] + (i-1)*m*n
aijk地址:
Loc[i][j][k] = Loc[1][1][1] + (i-1)*m*n + (j-1)*n+(k-1)
其中1≤i≤r,1≤j≤m,1≤k≤n

一般情况:
用j1,j2,j3代替数组下标i,j,k,下限分别为c1,c2,c3,上限分别为d1,d2,d3.
任意元素aj1j2j3地址:
Loc[j1][j2][j3]=Loc[c1][c2][c3]+((d2-c2+1)*(d3-c3+1)*(j1-c1)+(d3-c3+1)*(j2-c2)+(j3-c3))*size.
在这里插入图片描述n维数据地址计算:

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值