5.2.2 稀疏矩阵的压缩存储方法

 二、行逻辑链接的顺序表

算法 行逻辑链接的三元组顺序表的结构定义
  const MAXMN = 500;       // 矩阵行数和列数的最大值
  const MAXTERMS=12500;     // 假设非零元个数的最大值为12500
  typedef struct {
   Triple data[MAXSIZE + 1];   // 非零元三元组表,data[0] 未用
   int rpos[MAXMN + 2];    // 指示各行第一个非零元在data中的位置
   int rows, cols, terms;   // 矩阵的行数、列数和非零元的个数
  } RLSMatrix;         // 行逻辑链接顺序表

  以下讨论行逻辑链接顺序表的两个算法。

 

  由于三元组顺序表以行序为主序存放矩阵的非零元,则为取得第i行的非零元,必须从第一个元素起进行搜索查询。而从上页讨论的矩阵转置算法可见,在算法过程中计算得到的 rpos[M.cols+1] 中的值实际上起到了一个"指示矩阵中每一行的第一个非零元在三元组表中的序号"的作用,因此如果在建立稀疏矩阵的三元组顺序表的同时将这个信息固定在存储结构中,将便于随机存取稀疏矩阵中任意一行的非零元。可将 rpos 中的值视作指向每一行第一个非零元的指针,故称这种表示方法为"行逻辑链接"的顺序表。