一维数组的存储结构
ElemType arr[10];
各数组元素大小相同,且物理上连续存放。
数组元素a[i]的存放地址 = LOC + i * sizeof(ElemType)。(LOC为起始地址)
二维数组的存储结构
ElemType b[2][4];
二维数组也具有随机存取的特性(需要明确是行优先还是列优先)。
普通矩阵的存储
特殊矩阵的存储
对称矩阵的压缩存储
策略:只存储主对角线及下三角区(或上三角区)的元素。可以按行优先或列优先将各元素存入一维数组中。
重点即在于矩阵下标和一维数组下标的映射
按照行优先原则
考虑是第几个元素,其前面有 行,且第 k 行有k个元素,则前 i -1行共有个元素,是第i行第j个,则它是第个元素。由于数组的下标是从0开始的,因此
,即在上三角区,由于是对称矩阵,所以,所以
按照列优先原则
考虑是第几个元素,其前面有 列,且第 k 列有个元素,则前 j -1列共有个元素,是第 j 列的 个(从对角线开始数),则它是第个元素。由于数组的下标是从0开始的,因此
三角矩阵的压缩存储
策略:按行优先原则将上三角区(或下三角区)的元素存入一维数组中。
我们创建一个一维数组B[k],共有个元素,我们将上三角的相同元素c存在一维数组末尾。
下三角
上三角
三对角矩阵的压缩存储
三对角矩阵,又称带状矩阵,当时,有
策略:只存储带状部分,即当|i-j|≤1时的元素。按行优先(或列优先)原则存储。我们创建一个一维数组B[k],共有个元素。
按照行优先原则,考虑是第几个元素,前行有个元素,是第i行的个元素,所以是第个元素,所以