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

 一、三元组顺序表

算法 稀疏矩阵的三元组顺序表的结构定义
  const MAXTERMS=12500;      // 假设非零元个数的最大值为12500
  typedef struct {
   int i, j;          // 该非零元的行号和列号
   ElemType e;         // 该非零元的值
  } Triple;           // 三元组
  typedef struct {
   Triple data[MAXTERMS + 1];  // 非零元三元组表,data[0] 未用
   int rows, cols, terms;   // 矩阵的行数、列数和非零元的个数
  } TSMatrix;         // 三元组顺序表
 

  以顺序存储结构作为三元组线性表的存储结构,由此得到的稀疏矩阵的一种压缩存储方法,称之谓三元组顺序表。

  显然,在三元组顺序表中容易从给定的行列号(i,j)找到对应的矩阵元。首先按行号 i 在顺序表中进行"有序"搜索,找到相同的 i 之后再按列号进行有序搜索,若在三元组顺序表中找到行号和列号都和给定值相同的元素,则其中的非零元值即为所求,否则为矩阵中的零元。

  同一行的下一个非零元即为顺序表中的后继,搜索同一列中下一个非零元稍微麻烦些,但由于顺序表是以行号为主序有序的,则在依次搜索过程中遇到的下一个列号相同的元素即为同一列的下一个非零元。