数组的存储结构
以一维数组 A[0…n−1]为例,其存储结构关系式为
LOC(ai)=LOC(a0)+i×L(0≤i<n)
其中L是每个数组元素所占的存储单元。
对于多维数组,有两种映射方法:按行优先和按列优先。
按行优先
设二维数组的行下标与列下标的范围分别为[0,h1]与[0,h2],则存储结构关系式为
LOC(ai,j)=LOC(a0,0+i×(h2+1)+j)×L
image.png 按列优先
LOC(ai,j)=LOC(a0,0+j×(h1+1)+i)×L
image.png 特殊矩阵的压缩存储
注意
- 解相关题目时,要注意题目条件中给定的数组下标的信息,一般是从
0开始的,部分题目中是从1开始的 - 一般而言数组的下标默认从
0开始,但是矩阵的第一个元素一般写为a1,1,即从1开始
对称矩阵
将n阶对阵矩阵A存放在一维数组B[2n(n+1)]中
若只存储下三角部分(含对角线)元素,则ai,j在数组B中的下标k=1+2+⋯+(i−1)+j−1=2i(i−1)+j−1(数组下标从0开始),对应关系如下
k=⎩⎨⎧2i(i−1)+j−12j(j−1)+i−1i≥j(下三角和主对角线)i<j(上三角ai,j=aj,i)
三角矩阵
其存储思想与对称矩阵类似,不同之处在于存储完下三角区和主对角线上的元素之后,紧接着存储对角线上方的常量一次
下三角
将n阶对阵矩阵A存放在一维数组B[2n(n+1)+1]中,对应关系如下
k=⎩⎨⎧2i(i−1)+j−12n(n+1)i≥j(下三角和主对角线)i<j(上三角)
image.png 上三角
k=⎩⎨⎧2(i−1)(2n−i+2)+j−i2n(n+1)i≥j(下三角和主对角线)i<j(上三角)
image.png 三对角矩阵
- 对角矩阵也称带状矩阵
- 对于n阶矩阵A中的任意一个元素ai,j,当∣i−j∣>1时,有ai,j=0(1≤i,j≤n),则称为三对角矩阵
- 在三对角矩阵中,所有非零元素都集中在以主对角线为中心的3条对角线的区域,其他区域的元素都为零
a1,1a2,1a1,2a2,2a3,20a2,3a3,3⋱an−1,n−2a3,4⋱an−1,n−1an,n−10⋱an−1,nan,n
将3条对角线上的元素按行优先方式存放在一维数组B中,且a1,1存放于B[0]中,则ai,j(1≤i,j≤n,∣i−j∣≤1)对应下标k=2i+j−3
提示
- 解题时一般是根据题目所给条件现场推导
- 记住各种矩阵的存储方式直接推导
- 上三角第一行n个元素,第二行n-1个...,第一列1个,第二列2个...;下三角第一行1一个,第二行2个...,第一列n个,第二列n-1个...,三对角矩阵除了第一行和最后一行是2个其他的行都是3个
- 例如n阶下三角矩阵A按列优先顺序,元素ai,j之前有j−1列,共有n+(n−1)+⋯+(n−j+2)=(j−1)(2n−j+2)/2 个元素,元素ai,j是第j列上第i−j+1个元素,数组B下标从1开始,k=(j−1)(2n−j+2)/2+i−j+1
稀疏矩阵
- 矩阵中非零元素的个数t,相对矩阵元素的个数s来说非常少,即s≫t的矩阵称为稀疏矩阵
- 将非零元素及其相应的行和列构成一个三元组
(行标,列标,值),然后按照某种规律存储这些三元组 - 稀疏矩阵压缩存储后便失去了随机存取特性
- 三元组可采用数组存储,也可以采用十字链表法存储