稀疏矩阵(三元组)的转置【时间复杂度较低的】

#include
#define MAXSIZE 12500
typedef int ElemType;
typedef struct
{
int i,j;
ElemType e;
}Triple;
typedef struct
{
Triple data[MAXSIZE];
int mu,nu,tu;
}TSMatrix;




void TransposeSMatrix(TSMatrix M,TSMatrix &T)
{
int col,p,t,q;
int num[20],cpot[20];
T.mu=M.nu;T.nu=M.mu;T.tu=M.tu;
if(T.tu)
{
for(col=0;col num[col]=0;
for(t=0;t ++num[M.data[t].j];
cpot[0]=0;
for(col=1;col cpot[col]=cpot[col-1]+num[col-1];
for(p=0;p {
col=M.data[p].j; q=cpot[col];
T.data[q].i=M.data[p].j;
T.data[q].j=M.data[p].i;
T.data[q].e=M.data[p].e;
++cpot[col];
}
}
}








int main()
{
TSMatrix M,T;
printf("请输入矩阵的行数,列数:\n");
scanf("%d%d",&M.mu,&M.nu);


printf("请输入元素个数:");
scanf("%d",&M.tu);


printf("请输入原矩阵的各个压缩值:\n");
for(int i=0;i {
scanf("%d%d%d",&M.data[i].i,&M.data[i].j,&M.data[i].e);
}
printf("请输出原矩阵:\n");

for(i=0;i {
printf("%3d%3d%3d\n",M.data[i].i,M.data[i].j,M.data[i].e);
}


printf("输出转置后的矩阵:\n");
    TransposeSMatrix(M,T);
for(i=0;i {
printf("%3d%3d%3d\n",T.data[i].i,T.data[i].j,T.data[i].e);
}
    
return 0;
}

你可能感兴趣的:(稀疏矩阵(三元组)的转置【时间复杂度较低的】)