资源描述:
《C++实现稀疏矩阵转换三元组并转置(c语言)》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、#include#include#defineMAXSIZE100typedefstruct{inti,j;inte;}Triple;typedefstruct{Tripledata[MAXSIZE+1];intmu,nu,tu;}Tsmatrix;inta,b;/*定义全局变量数组的行数a和列数b*//*用数组创建三元组*/Tsmatrix*creatarray(Tsmatrix*M){intm,n,p=1;intc;printf("pleaseinputthearrayA:
2、");for(m=1;m<=a;m++)for(n=1;n<=b;n++){scanf("%d",&c);if(c!=0){M->data[p].e=c;M->data[p].i=m;M->data[p].j=n;p++;}}M->tu=p;M->mu=a;M->nu=b;printf("原矩阵三元组表示为:");for(m=1;mtu;m++)printf("%3d%3d%3dt",M->data[m].i,M->data[m].j,M->data[m].e);printf("");retu
3、rnM;}/*三元组快速转置*/Tsmatrix*fasttrans(Tsmatrix*M,Tsmatrix*T){intp,col,q,t,m;intnum[100];intcpot[100];T->mu=M->nu;T->nu=M->mu;T->tu=M->tu;if(T->tu!=0){for(col=1;col<=M->nu;++col)num[col]=0;for(t=1;ttu;++t)num[M->data[t].j]++;cpot[1]=1;for(col=2;col<=M->nu;++col)
4、cpot[col]=cpot[col-1]+num[col-1];for(p=1;ptu;++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];}}printf("转置之后的三元组表示:");for(m=1;mtu;m++)printf("%3d%3d%3dt",T->data[m].i,T->da
5、ta[m].j,T->data[m].e);printf("");returnT;}/*输出三元组函数*/voidprint(Tsmatrix*T,intx,inty){intm,n,p=1;intd;for(m=1;m<=x;m++){printf("");for(n=1;n<=y;n++){if(T->data[p].i==m&&T->data[p].j==n){d=T->data[p].e;p++;}elsed=0;printf("%6d",d);}}printf("");}voidmain(){Ts
6、matrix*M,*T;M=(Tsmatrix*)malloc(sizeof(Tsmatrix));T=(Tsmatrix*)malloc(sizeof(Tsmatrix));printf("请输入行数和列数:");scanf("%d%d",&a,&b);/*输入行列数*/M=creatarray(M);printf("创建的矩阵为:");print(M,a,b);T=fasttrans(M,T);printf("转置后的矩阵为:");print(T,b,a);//getch();}