原题链接:数据结构-稀疏矩阵转置 - C语言网 (dotcpp.com)
#include <stdio.h>
#include <malloc.h>
//定义一个结构体,存储数字的,值,行,列
typedef struct Link {
int data;
int hang;
int lie;
}*node,Node;
//存储非零元素的结构体指针
node Num[1000];
int main(){
int a,b,i,j,temp,n=0,k,flag;
node p;
scanf ("%d%d",&a,&b);
for (i=1;i<=a;i++){
for (j=1;j<=b;j++){
scanf ("%d",&temp);
//只储存非0元素
if (temp){
//分配内存给p
p=(node)malloc(sizeof(Node));
//p的值,为当前读入的值
//p的行和列等于当前的行和列
p->data=temp;
p->hang=i;
p->lie=j;
//将当前的指针储存在数组中
Num[n++]=p;
}
}
}
for (i=1;i<=b;i++){
for (j=1;j<=a;j++){
flag=1;
//元素的列等于当前遍历时的行,元素的列等于当前遍历的行时
//输出元素
for (k=0;k<n;k++){
if (Num[k]->hang==j && Num[k]->lie==i){
printf("%d ",Num[k]->data);
flag=0;
break;
}
}
//没有找到这样的元素就输出0
if (flag) printf("0 ");
}
printf("\n");
}
return 0;
}