首先想要转置矩阵,就要有原矩阵
根据要求选择了三元组来存储稀疏矩阵
#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 12500
typedef struct{
int i,j;
int e;
}Triple;
typedef struct{
Triple data[MAXSIZE+1];
int mu,nu,tu;
}TSMatrix;
//三元组顺序存储
int main(void){
TSMatrix t,m;//创建两个三元组
int a;
printf("请输入矩阵的行数、列数和非零元的个数\n");
scanf("%d%d%d",&m.mu,&m.nu,&m.tu);
printf("请输入非零元素的行标、列标和非零元\n");
for(a=1;a<=m.tu;a++){
scanf("%d%d%d",&m.data[a].i,&m.data[a].j,&m.data[a].e);
}//输入矩阵
a=1;
for(int i=1;i<=m.mu;i++){
for(int j=1;j<=m.nu;j++){
if(m.data[a].i==i&&m.data[a].j==j)
printf("%5d",m.data[a++].e);
else printf("%5d",0);
}
printf("\n");
}//输出原矩阵
t.mu=m.nu;
t.nu=m.mu;
t.tu=m.tu;
if(t.tu){
a=1;
for(int b=1;b<=m.nu;++b){
for(int c=1;c<=m.tu;++c)
if(m.data[c].j==b){
t.data[a].i=m.data[c].j;
t.data[a].j=m.data[c].i;
t.data[a].e=m.data[c].e;
++a;
}
}
}//转置矩阵
printf("转置矩阵为:\n");
a=1;
for(int i=1;i<=t.mu;i++){
for(int j=1;j<=t.nu;j++){
if(t.data[a].i==i&&t.data[a].j==j)
printf("%5d",t.data[a++].e);
else printf("%5d",0);
}
printf("\n");
}//输出转置矩阵
return 0;
}