数组和特殊矩阵

数组的存储结构

按行优先

数组元素在内存中按行的顺序依次存储。

二维数组示例

,存储顺序:

地址计算推导: 元素 前有 行(每行 个元素)和当前行的 个元素,故偏移量 。 公式:

按列优先

数组元素在内存中按列的顺序依次存储。

二维数组示例

的存储顺序:

地址计算推导: 元素 前有 列(每列 个元素)和当前列的 个元素,故偏移量 。 公式:

特殊矩阵的压缩存储

对称矩阵

满足 ,仅需存储下三角(含主对角线)。

示例

压缩存储序列:

地址映射推导

  • (下三角):元素 前有 行(第 行),元素总数 ,加上当前行 个元素。 公式:

三角矩阵

下三角矩阵

示例 压缩存储序列:

地址映射

  • 时:
  • 时:(指向常数

上三角矩阵

地址映射推导: 元素 前有 行(第 行),每行元素数递减: 第 行: 个,第 行: 个,…,第 行: 个。 前 行总元素数:,加上当前行偏移 。 公式:

三对角矩阵(带状矩阵)

非零元素位于主对角线及其相邻两条对角线上,满足

示例

压缩存储序列:

地址映射推导

  • 每行最多 个非零元素(首末行 个)。
  • 元素 在序列中的位置:前 行有 个元素(),加上当前行偏移 。 公式:

稀疏矩阵

非零元素远少于零元素,通常采用压缩存储。

三元组表示法

用三元组 表示非零元素的位置和值。

示例

的三元组:

存储结构

typedef struct {
    int i, j;     // 行标和列标
    ElemType v;   // 元素值
} Triple;

记忆技巧

  • 行优先排序:先按行号排序,同行内按列号排序(类似字典序)。
  • 压缩原理:用 空间存储 个非零元素(传统矩阵需 )。

十字链表表示法

适用于需要频繁插入和删除操作的稀疏矩阵,每个非零元素用一个节点表示,同时链接在对应的行链表和列链表中。

除了三元组(行标、列标、值)还要保存行数、列数非零元素的个数。