资源描述:
《矩阵的转置(北华大学吕磊)》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、#include#include#defineERROR0#defineOK1#defineMAXR20//最大行数#defineMAXC20//最大列数#defineMAXSIZEMAXR*MAXC//最多非零元个数typedefstruct{inti;//行下标intj;//列下标inte;//非零元值}Triple;typedefstruct{Tripledata[MAXSIZE];//三元组表int*rpos;//指向各行第一个非零元的位置表intmu;//行数intnu;//列数inttu;//非零元个数}TSMatrix;intCreat
2、eSMatrix(TSMatrix&M){inti,m,n;inte;intk,t=0;do{printf("请输入矩阵的行数(1~%d):",MAXR);scanf("%d",&M.mu);}while(M.mu<1
3、
4、M.mu>MAXR);do{printf("请输入矩阵的列数(1~%d):",MAXC);scanf("%d",&M.nu);}while(M.nu<1
5、
6、M.nu>MAXC);do{printf("请输入非零元个数(1~%d):",MAXR*MAXC);scanf("%d",&M.tu);}while(M.tu<1
7、
8、M.tu>MAXR*MAXC);M.data[0]
9、.i=0;printf("按行序输入非零元素所在的行列值,按如下形式:x,x,x");for(i=1;i<=M.tu;i++,t++){do{printf("第%d个元素:",t+1);scanf("%d,%d,%d",&m,&n,&e);k=0;if(m<1
10、
11、m>M.mu
12、
13、n<1
14、
15、n>M.nu)k=1;if(m16、
17、m==M.data[i-1].i&&n18、A){intk=1,a,b;printf("矩阵的如下:");intM[MAXSIZE][MAXSIZE];for(a=0;a19、");for(b=0;b20、");}}intTransposeSMatrix(TSMatrixM,TSMatrix
21、&T){T.mu=M.nu;T.nu=M.mu;T.tu=M.tu;intq,col,p;if(T.tu){q=1;for(col=1;col<=M.nu;++col)for(p=1;p<=M.tu;++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;}}}intFastTransposeSMatrix(TSMatrixM,TSMatrix&T){T.mu=M.nu;T.nu=M.mu;T.tu=M.tu;intcol,t,p,q;int*
22、num,*cpot;num=(int*)malloc((M.nu)*sizeof(int));cpot=(int*)malloc((M.nu)*sizeof(int));if(T.tu){for(col=1;col<=M.nu;++col)num[col]=0;for(t=1;t<=M.tu;++t)++num[M.data[t].j];cpot[1]=1;for(col=2;col<=M.nu;++col)cpot[col]=cpot[col-1]+num[col-1];for(p=1;p<=M.tu;++p){col=M.data[p].j;q=cpot[col];T.data[q]
23、.i=M.data[p].j;T.data[q].j=M.data[p].i;T.data[q].e=M.data[p].e;++cpot[col];}}}intmain(){TSMatrixM,T;inti;printf("创建矩阵:");CreateSMatrix(M);printf("创建完毕!");Print(M);printf("程序功能如下:");printf("1、普通转置");printf("2、