sparsematrix transpose(sparsematrix a) { int num[C] = { 0 }; //定义辅助数组num和sum,长度均为稀疏矩阵a的列数 int sum[C] = { 0 };
for (int i = 0; i < a.t; i++) { //数组num存储矩阵每一列的非零元素个数 //通过三元组表a统计原矩阵每一列的非零元素个数 //数组的下标i就代表原矩阵的第i列,对应的元素num[i]就代表非零元素个数 num[a.table[i].col]++; }
for (int i = 1; i < C; i++) { //数组sum存储矩阵a中列号从0到i-1的所有非零元素的个数 //比如sum[3]就存储了列号从0到2的所有非零元素的个数 //sum[i]的值决定了原矩阵中第i列的第一个非零元素在三元组表中的位置 //比如sum[2]=4,说明第2列第一个非零元素在三元组表中的下标是4 sum[i] = sum[i - 1] + num[i - 1]; }
sparsematrix b; b.m = C; b.n = R; b.t = 7;
for (int i = 0; i < a.t; i++) { int index = sum[a.table[i].col]++; b.table[index].col = a.table[i].row; b.table[index].row = a.table[i].col; b.table[index].value = a.table[i].value; }