一个阶数较大的矩阵中的非零元素个数s相对于矩阵元素的总个数t 十分小时,即s<<t时,称该矩阵为稀疏矩阵。
例如一100×100的矩阵,若其中只有100个非零元素,就可称其为稀疏矩阵。
一、 稀疏矩阵的三元组表示(顺序)
稀疏矩阵的压缩存储方法是只存储非零元素。
由于稀疏矩阵中非零元素的分布没有任何规律,所以在存储非零元素时还必须同时存储该非零元素所对应的行下标和列下标。
稀疏矩阵中的每一个非零元素需由一个三元组: (i, j, a i,j),其中i为行,j为列,a i,j表示非零元素。
唯一确定,稀疏矩阵中的所有非零元素构成三元组线性表。
假设有一个6×7阶稀疏矩阵A(为图示方便,所取的行列数都很小),A中元素如下图所示。则对应的三元组线性表为:
((0,2,1),(1,1,2),(2,0,3),(3,3,5), (4,4,6),(5,5,7),(5,6,4))
若把稀疏矩阵的三元组线性表按顺序存储结构存储,则称为稀疏矩阵的三元组顺序表。
则三元组顺序表的数据结构可定义如下:
#define MaxSize 100 //矩阵中非零元素最多个数
typedef struct
{ int r; //行号
int c; //列号
ElemType d; //元素值
} TupNode; //三元组定义
typedef struct
{ int rows; //行数值
int cols; //列数值
int nums; //非零元素个数
TupNode data[MaxSize];
} TSMatrix; //三元组顺序表定义
其中约定:data域中表示的非零元素通常以行序为主序顺序排列,它是一种下标按行有序的存储结构。
这种有序存储结构可简化大多数矩阵运算算法。
(1)从一个二维矩阵创建其三元组表示
以行序方式扫描二维矩阵A&#x