参考《数据结构(C语言版)》- 严蔚敏 吴伟民 - 清华大学出版社
稀疏矩阵的三元组结构定义
typedef struct {
int i, j; //该非零元的行下标和列下标
ElemType e; //非零元对应的值
}Triple;
typedef struct {
Triple data[MAX_SIZE]; //非零元三元组表
int mu, nu, tu; //矩阵的行数,列数,非零元个数
}TSMatrix;
稀疏矩阵的初始化
void Init_Matrix(TSMatrix &M)
{
int x, y, z;
int M_row = 0; int M_col = 0;
M.tu = 0;
printf("请按行,列,数据的形式输入,输入-1时结束输入\n");
for (int i = 0; ; i++)
{
scanf_s("%d,%d,%d", &x, &y, &z);
if (x == -1 || y == -1)
break;
M.data[i].i = x; M.data[i].j = y; M.data[i].e = z;
M.tu++;
if (M_row < x)
M_row = x;
if (M_col < y)
M_col = y;
}
M.mu = M_row;
M.nu = M_col;
}
按行进行的快速转置
void FastTransposeSMatrix_row(TSMatrix M, TSMatrix &T) { //T是转置矩阵,M是原矩阵
T.mu = M.nu;
T.nu = M.mu;
T.tu = M.tu;
if (T.tu) {
int num[100], cpot[100]; //num[]保存每一行的非零元素个数 cpot[]保存每行元素起始地址
for (int row = 0; row < M.mu; row++)
num[row] = 0; //对num初始化
for (int j = 0; j < M.tu; j++)
num[M.data[j].i - 1]++; //计算每一行非零元素的个数,因为矩阵从第一行开始,而data数组从0开始,要-1
cpot[0] =