数组
数组分为一维数组和二维数组,数组部分牵扯存储地址的计算。
一维数组
a[n];
n表示数组长度;
a[i]表示数组中编号为i的元素,实际上是第(i+1)个元素,因为数组序号从0开始;
第1个元素a[0]的存储地址是a的地址;
已知单个元素长度是len;
存储地址计算
元素 a[i] 的存储地址计算公式为:a[i] 地址 = a+i*len;
公式可以理解为:
二维数组
a[m][n];
二维数组可以看作是一张表;
m表示二维数组行,n表示二维数组列;
a[0][1]表示数组a的第0行第1列,a[1][0]表示数组a的第1行第0列;
二维数组分为按行存储和按列存储;
已知单个元素长度是len;
按行存储存储地址计算
m表示二维数组总行数;
元素 a[i][j] 按行存储地址计算公式为:a+(i*n+j)*len;
例题
已知5行5列的二维数组a中的各元素占两个字节,求元素a[2][3]按行优先存储的存储地址
a[2][3]按行优先存储的存储地址是:a+(2*5+3)*2=a+26。
可以理解为:
按列存储存储地址计算
n表示二维数组总列数;
元素a[i][j]按行存储地址计算公式为:a+(j*m+i)*len;
例题
已知5行5列的二维数组a中的各元素占两个字节,求元素a[2][3]按列优先存储的存储地址
a[2][3]按列优先存储的存储地址是:a+(3*5+2)*2=a+34。
可以理解为:
综上,此类在数组之中计算某元素的存储地址的题目计算可以理解为: 数组地址+此元素前的总元素数*单个元素长度
稀疏矩阵
若一个矩阵中记录的元素有大量元素为0,考虑只存储部分不为0的数据可以将矩阵存储下来,并达到节省空间的目的,因此提出稀疏矩阵概念。
此部分牵扯计算稀疏矩阵中的某一个元素对应的一维数组的下标。
注:
稀疏矩阵转化方式复杂,公式不好记(主要是我老记混),而且推导过程耗时(太麻烦考试时间不够)所以直接从题目上下手。
此部分考察绕不开公式,且公式、元素、数组必须三给其二,可以直接使用代数法对选项进行排除。
例题
如上述题目中按行存储,即矩阵A中的元素按顺序对应存储在数组M之中
即
A[0,0]---M[1]
A[1,0]---M[2]
A[0,1]---M[3]
......依次类推
那么可以将A[0,0]分别带入下面4个选项之中,看能否得出M[1];
选项A得出M[1];选项B得出M[0](排除);选项C得出M[0](排除);选项D得出M[1]
还剩选项A、D将A[1,0]带入选项A、D之中看能否得出M[2];
选项A得出M[2];选项D得出M[1](排除);
故选:A
注:
每个题目不同,注意区分细节,例如在有的题目数组M从0开始计数,那么A[0,0]应该对应的就是M[0];
有时候上、下三角不同,注意观察矩阵下标,因为矩阵下标作为系数参与运算;