数组
就是每一个元素存储在内存上且按照顺序连续存放。
多维数组可以按照不同的优先级进行存放。
以二维数组为例,可以按行优先进行存放,也可以按照列优先进行存放。
行优先,即先让一行连续存放,存放完一行,再存放下一行。列优先同样道理。
无论是多少维数组都可以写成:始址+偏移量的形式。所以无论多少维逻辑上都可以看为一维数组。
矩阵存储
矩阵可以很自然使用二维数组进行存储。
矩阵压缩存储
由于矩阵中可能有许多元素为0元素或者相同元素,如果重复存储浪费空间,可进行优化。
对称矩阵
每一个元素符合
a
i
j
=
a
j
i
a_{ij} = a_{ji}
aij=aji
称为对称矩阵,所以只需要存放上三角或者下三角即可,那么就不需要开辟二维数组,只需要开辟一位数组即可,只需要构建一个合理的映射关系。
以存放下三角为例:
如果按照行优先进行存放,那么对于aij元素前i-1行有 i*(i-1)/2个元素,同一行前面有j-1个元素,所以还需要加j-1.
如果按照列优先进行存放,对于aij,前面j-1列有(n, n-1, n-2, … , n-j+1)前面有(2n+1-j) * (j-1)/2,还需要加上同一列千前面几个(i-j)