Github仓库: JavaDataStructure: Java 版数据结构 (github.com)
2. 数组
2.1 数组的顺序存储
由于存储单元是一维结构,而数组可能是多维结构的,则用一组连续存储单元存放数组的数据元素就有次序约定问题。
二维数组的可有两种存储方式:一种以行序为主序的存储方式;一种以列序为主序的存储方式。
行序为主序。假设每个元素占 L 个存储单元,则二维数组 A[0..m−1,0..n−1] (即下标从0开始,共有 m 行 n 列)中任一元素 ai,j 的存储位置可由下式确定:
LOC(i,j)=LOC(0,0)+(n×i+j)
列序为主序。假设每个元素占 L 个存储单元,则二维数组 A[0..m−1,0..n−1] (即下标从0开始,共有 m 行 n 列)中任一元素 ai,j 的存储位置可由下式确定:
LOC(i,j)=LOC(0,0)+(m×j+i)
2.2 特殊矩阵的压缩存储
2.2.1 对称矩阵
对称矩阵(Symmetric Matrices)是指以主对角线为对称轴,各元素对应相等的矩阵。必须是n 阶方阵。
对于对称矩阵,可以为每一对对称元分配一个存储空间,则可将 n2 个元压缩存储到 2n(n+1) 个元的空间中。
假设以一维数组 sa[2n(n+1)] 作为 n 阶对称矩阵 A 的存储结构,则 sa[k] 和矩阵元 ai,j 之间存在着一一对应的关系:
k=⎩⎨⎧2i(i−1)+j−1 当 i≥j 2j(j−1)+i−1 当 i<j
例子:
⎣⎡a11a21a31…an1a12a22a32an2…………a1na2na3nann⎦⎤

⎣⎡124235456⎦⎤→⎣⎡a11a21a31a12a22a32a13a23a33⎦⎤

2.2.2 三角矩阵
上三角矩阵
上三角矩阵是指矩阵下三角(不包括对角线)中的元均为常数 c 或零的 n 阶矩阵。sa[k] (从0开始)和矩阵元 ai,j (从0开始)之间的对应关系为
k=⎩⎨⎧2(n−1−i)(1+n−1−i)+j−i 当 i≤j 2n(n+1) 当 i>j
下三角矩阵
下三角矩阵是指矩阵上三角(不包括对角线)中的元均为常数 c 或零的 n 阶矩阵。sa[k] 和矩阵元 ai,j 之间的对应关系为
k=⎩⎨⎧2i(i−1)+j−1 当 i≥j 2n(n+1) 当 i<j
证明
⎣⎡111…102220033…………000n⎦⎤→123…n
根据每行的非零元素个数,可得 a1=1,a2=2,a3=3,…,an=n
当 i≥j 时,aij (下标元素从1开始)的位置为:
在 i 之前一共有 i−1 行,可知 a1=1,ai−1=i−1,根据等差求和公式可求得前面行数共有多少个元素,公式如下所示:
Sn=2n(a1+an)=2(i−1)(1+i−1)=2i(i−1)
可得公式为:aij=2i(i−1)+j−1