/*
*
* 稀疏矩阵的知识,比较重要的是压缩存储!
* 定义: 假设m行n列的矩阵中,只有t个非零元素,则成 t/(m*n)为稀疏因子,当稀疏因子<=0.05的时候称为稀疏矩阵
* 产生的问题: 大约95%的元素都是0,占用的空间很大,计算的时候也和这些0做了很多运算(+,-,*,/),而/法还不能除0,所以特别麻烦
*
* 压缩存储:
* (1)特殊矩阵(三角矩阵,对角矩阵)的压缩存储比较简单
* (2)随机稀疏矩阵的压缩存储:
1.三元组顺序表
元素类型:(行号,列号,元素值)
稀疏矩阵类型:(一个数组,行数,列数,非零元个数) //改进后的类型是里面还存在一个记录每一行首非零元出现的位置的
Const MaxSize = 1000;
typedef struct
{
int i;
int j;
ElemType e;
}Triple; //元素类型
typedef union
{
Triple data[MaxSize + 1];
int mu;
int nu;
int tu;
}TSMatrix; //稀疏矩阵类型
求转置的话:要考虑转过了之后要放到指定的位置【按行从小到大排,所以要做一点操作】
int FastTransposeSMatrix(TSMatrix M, TSMatrix & T)
{
T.mu = M.nu; //转置的行和列 等于 原来的矩阵的 列和行
T.nu = M.mu;
T.tu = M.tu; //非零元个数是相等的
if (T.tu)
{
for (col=1; col<=M.nu; ++col)
{
num[col]