题目:对一个稀疏矩阵,安提示输入其行号,列号及每个元素值,程序将建立稀疏矩阵的三元组存储结构,并将三元组存储结构的稀疏矩阵转置并显示转置后稀疏矩阵的三元组结构。
1 #include <stdio.h> 2 #include <stdlib.h> 3 4 /* run this program using the console pauser or add your own getch, system("pause") or input loop */ 5 typedef struct { 6 int i,j; 7 int e; 8 }triple; 9 typedef struct { 10 triple data[20]; 11 int mu,nu,tu; 12 }TS; 13 TS transpose(TS a){ 14 /*稀疏矩阵(三元组存储结构)转置算法*/ 15 int p,q,col; 16 TS b; 17 b.mu=a.nu;b.nu=a.mu;b.tu=a.tu; 18 if(a.tu!=0){ 19 q=1; 20 for(col=1;col<=a.nu;col++){ 21 for(p=1;p<=a.tu;p++){ 22 if(a.data[p].j==col){ 23 b.data[q].j=a.data[p].i; 24 b.data[q].i=a.data[p].j; 25 b.data[q].e=a.data[p].e; 26 q++;} 27 } 28 }} 29 return b; 30 } 31 void printmatrix(TS c){ 32 /*稀疏矩阵(三元组存储结构)显示*/ 33 int n,i; 34 n=c.tu; 35 for(i=1;i<=n;i++){ 36 printf("[%d]行号=%d 列号=%d 元素值=%d\n ",i,c.data[i].i,c.data[i].j,c.data[i].e); 37 } } 38 main(){ 39 TS a; 40 TS b; 41 int i,j,r,c,t,n; 42 n=1; 43 printf("\n\n输入矩阵行号数:"); 44 scanf("%d",&r); 45 printf("\n\n输入矩阵列号数:"); 46 scanf("%d",&c); 47 a.mu=r;a.nu=c; 48 printf("\n\n"); 49 for(i=0;i<r;i++){ 50 for(j=0;j<c;j++){ 51 printf("输入元素[%d,%d]值:",i+1,j+1); 52 scanf("%d",&t); 53 if(t!=0){ 54 a.data[n].i=i+1;/*非零元素存入稀疏矩阵三元组存储结构中*/ 55 a.data[n].j=j+1; 56 a.data[n].e=t; 57 n=n+1; 58 } 59 }} 60 n=n-1;a.tu=n; 61 printf("\n\n稀疏矩阵三元组表示:\n\n"); 62 printmatrix(a); 63 b=transpose(a); 64 printf("\n\n转置后的稀疏矩阵三元组表示:\n\n"); 65 printmatrix(b); 66 printf("\n\n"); 67 68 } 69
测试结果:
思考题:
利用第二种稀疏矩阵快速转置方法实现转置: