Chapter5-数组
5.1 数组的顺序存储
5.1.1 一维数组的存储
数组存储的首地址:BaseBaseBase,每个元素需要的存储单元:LLL,则下标为iii的元素存储在:
Loc(0,1,...,n)=Base+Map(0,1,...,n)×L
Loc(0, 1, ..., n) = Base + Map(0, 1,..., n) \times L
Loc(0,1,...,n)=Base+Map(0,1,...,n)×L
5.1.2 二维数组的存储
分为两种存储方式:行序为主序和列序为主序。
对于一个一般意义的二维数组a[c1:d1,c2:d2]a[c_1:d_1, c_2:d_2]a[c1:d1,c2:d2],设每个元素占用LLL个存储单元,Loc(c1,c2)Loc(c_1, c_2)Loc(c1,c2)是第一个元素ac1,ac2ac_1, ac_2ac1,ac2的存储位置。
1.行序为主序
先排最右的下标,依次向左,最后排最左的下标。

地址的计算方法为:
Loc(i,j)=Loc(c1,c2)+[(d2−c2+1)(i−c1)+(j−c2)]∗L
Loc(i, j) = Loc(c_1, c_2) + [(d_2 - c_2 + 1)(i - c_1) + (j - c_2)] *L
Loc(i,j)=Loc(c1,c2)+[(d2−c2+1)(i−c1)+(j−c2)]∗L
2.列序为主序

先排最左的下标,依次向右,最后排最又的下标。
地址的计算方法为:
Loc(i,j)=Loc(c1,c2)+[(d1−c1+1)(j−c2)+(i−c1)]∗L
Loc(i, j) = Loc(c_1, c_2) + [(d_1 - c_1 + 1)(j - c_2) + (i - c_1)] *L
Loc(i,j)=Loc(c1,c2)+[(d1−c1+1)(j−c2)+(i−c1)]∗L
5.1.3 三维数组及高维数组的存储
三维数组的存储中引入了一个叫做页的玩意儿。三维数组可以看为是m1m_1m1层二维数组堆叠起来的玩意儿,其中的每一个二维数组为一个页。

5.2 矩阵
5.2.1 特殊矩阵
1.对称矩阵

不难观察得到有aij=ajia_{ij} = a_{ji}aij=aji.

则查找元素aija_{ij}aij时计算地址的公式为:
k=i(i−1)2+j−1,i≥j
k = \frac{i(i - 1)}{2} + j - 1, i≥j
k=2i(i−1)+j−1,i≥j
k=j(j−1)2=i−1,i<j
k = \frac{j(j - 1)}{2} = i - 1, i <j
k=2j(j−1)=i−1,i<j
2.三角矩阵
三角矩阵在对称矩阵的基础上更加特殊,结构为:

存储方式和对称矩阵的存储方式基本相同:

计算某一个元素aija_{ij}aij时的地址为:
k=i(i−1)2+j−1
k = \frac{i(i - 1)}{2} + j - 1
k=2i(i−1)+j−1
3.三对角矩阵
这个就更加特殊了,结构为:

观察矩阵特征可以得到三个关系式:
主对角线:i=j
主对角线:i= j
主对角线:i=j
低对角线:i=j+1
低对角线: i = j + 1
低对角线:i=j+1
高对角线:j=i+1
高对角线:j = i + 1
高对角线:j=i+1
可以采用下面三种方式进行映射:

当按照行序为主序时,存储地址对应的下标为:
k=2(i−1)+(j−1),∣i−j∣<1
k = 2(i - 1) + (j - 1), |i - j|<1
k=2(i−1)+(j−1),∣i−j∣<1
当按照列序为主序时,存储地址对应的下标为:
k=2(j−1)+(i−1),∣i−j∣<1
k = 2(j - 1) + (i - 1), |i - j| < 1
k=2(j−1)+(i−1),∣i−j∣<1
5.2.2 稀疏矩阵
1.三元组表示法
存储的格式为:
| 行数 | 列数 | 非零元素的值 |
|---|---|---|
| (行号) | (列号) | (值) |

2.十字链表

2万+

被折叠的 条评论
为什么被折叠?



