一开始就算Debug也找不出错,可是最后也是自己改好实现了。+1!
/* * 这个程序用三元表顺序存储来表示稀疏矩阵, * 并且将这个矩阵转置。 */ #include<stdio.h> /*稀疏矩阵的三元组顺序存储表示*/ #define MAXSIZE 100 typedef struct triple{ int i,j,e; }triple; typedef struct matrix{ triple data[MAXSIZE+1]; int mu,nu,tu; }matrix; matrix transpose(matrix M,matrix T){ /*采用三元组存储表示,*/ int q,p,col; T.mu = M.nu = 4; /*求稀疏矩阵 M 的转置矩阵 T 。*/ T.nu = M.mu = 5; T.tu = M.tu = 5; if(T.tu!=0){ q = 0; for(col = 0;col<=M.nu-1;col++){ for(p = 0;p<=M.tu-1;p++){ if(M.data[p].j==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; q++; } } } } return T; } int input(int a[5][4]){ /*输入一个5行5列的矩阵*/ int i,j; for(i = 0;i<=4;i++){ for(j = 0;j<=3;j++){ scanf("%d",&a[i][j]); } } return 0; } matrix store(int a[5][4],matrix M){ /*将稀疏矩阵中的非 0 元素存储进三元表*/ int i,j,k; M.mu = 5; M.nu = 4; k = 0; for(i = 0;i<=4;i++) for(j = 0;j<=3;j++) if(a[i][j]!=0){ M.data[k].i = i; M.data[k].j = j; M.data[k].e = a[i][j]; k++; } return M; } int print(matrix T,int b[4][5]){ /*把矩阵 T 输出*/ int i,j,p; T.mu = 4; T.nu = 5; T.tu = 5; for(i = 0;i<=T.mu-1;i++){ for(j = 0;j<=T.nu-1;j++){ b[i][j] = 0; for(p = 0;p<=T.tu-1;p++){ if(T.data[p].i==i&&T.data[p].j==j) b[i][j] = T.data[p].e; } printf("%3d",b[i][j]); } printf("\n"); } return 0; } int main(){ int a[5][4],b[4][5]; matrix A,B; input(a); A = store(a,A); /*一开始错在并没有把矩阵传出,下面的函数也是一样*/ B = transpose(A,B); /*只是还不知道为什么要这样*/ print(B,b); return 0; } /* * 测试案例: * 输入: * * 0 0 1 0 * 0 0 2 0 * 0 0 3 0 * 0 0 4 0 * 0 0 5 0 * * 输出: * 0 0 0 0 0 * 0 0 0 0 0 * 1 2 3 4 5 * 0 0 0 0 0 */