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

#include <stdio.h>
#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<M.tu;col++)
num[col]=0;
for(t=0;t<M.tu;t++)
++num[M.data[t].j];
cpot[0]=0;
for(col=1;col<M.nu;col++)
cpot[col]=cpot[col-1]+num[col-1];
for(p=0;p<M.tu;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<M.tu;i++)
{
scanf("%d%d%d",&M.data[i].i,&M.data[i].j,&M.data[i].e);
}
printf("请输出原矩阵:\n");

for(i=0;i<M.tu;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<T.tu;i++)
{
printf("%3d%3d%3d\n",T.data[i].i,T.data[i].j,T.data[i].e);
}
    
return 0;
}
  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值