博客地址: http://www.yiyehu.tech/archives/category/数据结构
#define MAXSIZE 12500
typedef struct {
int i, j; //行i,列j
ElemType e;
}Triple;
typedef struct {
Tripe data[MAXSIZE + 1];
int rowNum, colNum, nozeroNum; /* mu 为行数 nu 为列数 tu 为非零元个数*/
}TSMatrix;
##转置1
1、矩阵的行列的值互换,也就是i、j互换。
2、对三元组的次序进行重新排序。
TSMatrix transpose(TSMatrix a)
{/*稀疏矩阵(三元组存储结构)转置算法*/
int p, q, col;
TSMatrix a;
b.rowNum = a.colNum; b.colNum = a.rowNum; b.tu = a.nozeroNum;
if (a.nozeroNum != 0)
{
q = 1;
for (col = 1; col <= a.colNum; col++)
for (p = 1; p <= a.nozeroNum; p++)
if (a.data[p].j == col)
{
b.data[q].j = a.data[p].i;
b.data[q].i = a.data[p].j;
b.data[q].e = a.data[p].e;
q++;
}
}
return b;
}
##转置2
1、矩阵的行列的值互换,也就是i、j互换。
2、直接将转置后的三元组放置在b中恰当的位置 。
/* cpot 是对应行的第一个位置,所以第一列的第一个位置为1,其他行的位置为前面所有行所对应的非零个数的和+1*/
TSMatrix transpose(TSMatrix a)
{/*稀疏矩阵(三元组存储结构)转置算法*/
int p, q, col;
int num[a.colNum + 1];
int cpot[a.colNum + 1];
TSMatrix b;
b.rowNum = a.colNum; b.colNum = a.rowNum; b.tu = a.nozeroNum;
if (a.nozeroNum != 0)
{
for (col = 1; col <= a.colNum; col++) num[col] = 0;
for (int t = 1; t <= a.nozeroNum; t++) ++num[a.data[t].j];
cpot[1] = 1;
for (col = 2; col <= a.colNum; col++) cpot[col] = cpot[col - 1] + num[col - 1];
for (p = 1; p <= a.nozeroNum; p++) {
col = a.data[p].j;
q = cpot[col]; //p 代表 矩阵a的位置,q代表在b中要插入的位置。
b.data[q].j = a.data[p].i;
b.data[q].i = a.data[p].j;
b.data[q].e = a.data[p].e;
++cpot[col]; //位置发生变化 自动加一
}
}
return b;
}