欢迎来到天天文库
浏览记录
ID:11050814
大小:60.50 KB
页数:4页
时间:2018-07-09
《矩阵的转置(详解)》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、//矩阵的转置(亲自调试完成):#include#include//头文件#defineMAXSIZE100#defineOK1typedefintElemType;typedefstruct{intc,r;//该非零元的行下标和列下标ElemTypee;//矩阵中某个位置元素的值}Triple;typedefstruct{Tripledata[MAXSIZE];intmu,nu,tu;//矩阵的行数、列数和非零元个数}TSMatrix;intcol,row;//稀疏矩阵的行列数,全局变量;v
2、oidinput(ElemTypea[MAXSIZE][MAXSIZE]){printf("pleaseinputthecolumnofthematrix:");scanf("%d",&col);//确定矩阵的行数printf("pleaseinputtherowofthematrix:");scanf("%d",&row);//确定矩阵的列数for(inti=0;i3、i,j);scanf("%d",&a[i][j]);}printf("");}}voidinit(ElemTypea[MAXSIZE][MAXSIZE],Tripleta[],TSMatrix*t){inti,j;t->tu=0;//初始化非零个数for(i=0;itu].c=i;ta[t->tu].r=j;ta[t->tu].e=a[i][j];t->tu++;}//记录非零元素的位置与值t->mu=row;t->nu=col;}4、voidTransposeSMatrix(TSMatrix*Ma,TSMatrix*Mb,Tripleta[],Tripletb[]){//采用三元组表存储表示,求稀疏矩阵M的转置矩阵Mbintk=0;intp,q;ElemTypeb[MAXSIZE][MAXSIZE]={0};//初始化用来存储最后转置好的矩阵Mb->mu=Ma->nu;//行Mb->nu=Ma->mu;//列Mb->tu=Ma->tu;//非零元个数//用于输出三元组转置后的情况if(Ma->tu!=0){for(inti=0;inu;i++,q++5、)for(intj=0;jtu;j++,p++)if(ta[j].r==i){tb[k].c=ta[j].r;tb[k].r=ta[j].c;tb[k].e=ta[j].e;//为转置好后的三元组做记录p=tb[k].c;q=tb[k].r;b[p][q]=tb[k].e;//为转置好后的矩阵做好非零元素的位置与值的记录k++;}}printf("thefinalMatrix:");//打印转置好后的矩阵,偷懒的做法for(intp=0;p6、"t%d",b[p][q]);}printf("");}}voidprintfMatrix(ElemTypea[MAXSIZE][MAXSIZE]){//用来打印矩阵的函数for(inti=0;i7、)printf("t%dt%dt%d",tb[i].c,tb[i].r,tb[i].e);}intmain(){ElemTypea[MAXSIZE][MAXSIZE],b[MAXSIZE][MAXSIZE]={0};Tripleta[MAXSIZE],tb[MAXSIZE];TSMatrix*Ma,*Mb;if((Ma=(TSMatrix*)malloc(sizeof(TSMatrix)))==NULL)returnprintf("APPLYERROR!");if((Mb=(TSMatrix*)malloc(sizeof8、(TSMatrix)))==NULL)returnprintf("APPLYERROR!");//申请三元组的空间,失败则打印错误信息input(a);printf("theoriginalmatrix:");//原先的矩阵printfMa
3、i,j);scanf("%d",&a[i][j]);}printf("");}}voidinit(ElemTypea[MAXSIZE][MAXSIZE],Tripleta[],TSMatrix*t){inti,j;t->tu=0;//初始化非零个数for(i=0;itu].c=i;ta[t->tu].r=j;ta[t->tu].e=a[i][j];t->tu++;}//记录非零元素的位置与值t->mu=row;t->nu=col;}
4、voidTransposeSMatrix(TSMatrix*Ma,TSMatrix*Mb,Tripleta[],Tripletb[]){//采用三元组表存储表示,求稀疏矩阵M的转置矩阵Mbintk=0;intp,q;ElemTypeb[MAXSIZE][MAXSIZE]={0};//初始化用来存储最后转置好的矩阵Mb->mu=Ma->nu;//行Mb->nu=Ma->mu;//列Mb->tu=Ma->tu;//非零元个数//用于输出三元组转置后的情况if(Ma->tu!=0){for(inti=0;inu;i++,q++
5、)for(intj=0;jtu;j++,p++)if(ta[j].r==i){tb[k].c=ta[j].r;tb[k].r=ta[j].c;tb[k].e=ta[j].e;//为转置好后的三元组做记录p=tb[k].c;q=tb[k].r;b[p][q]=tb[k].e;//为转置好后的矩阵做好非零元素的位置与值的记录k++;}}printf("thefinalMatrix:");//打印转置好后的矩阵,偷懒的做法for(intp=0;p6、"t%d",b[p][q]);}printf("");}}voidprintfMatrix(ElemTypea[MAXSIZE][MAXSIZE]){//用来打印矩阵的函数for(inti=0;i7、)printf("t%dt%dt%d",tb[i].c,tb[i].r,tb[i].e);}intmain(){ElemTypea[MAXSIZE][MAXSIZE],b[MAXSIZE][MAXSIZE]={0};Tripleta[MAXSIZE],tb[MAXSIZE];TSMatrix*Ma,*Mb;if((Ma=(TSMatrix*)malloc(sizeof(TSMatrix)))==NULL)returnprintf("APPLYERROR!");if((Mb=(TSMatrix*)malloc(sizeof8、(TSMatrix)))==NULL)returnprintf("APPLYERROR!");//申请三元组的空间,失败则打印错误信息input(a);printf("theoriginalmatrix:");//原先的矩阵printfMa
6、"t%d",b[p][q]);}printf("");}}voidprintfMatrix(ElemTypea[MAXSIZE][MAXSIZE]){//用来打印矩阵的函数for(inti=0;i7、)printf("t%dt%dt%d",tb[i].c,tb[i].r,tb[i].e);}intmain(){ElemTypea[MAXSIZE][MAXSIZE],b[MAXSIZE][MAXSIZE]={0};Tripleta[MAXSIZE],tb[MAXSIZE];TSMatrix*Ma,*Mb;if((Ma=(TSMatrix*)malloc(sizeof(TSMatrix)))==NULL)returnprintf("APPLYERROR!");if((Mb=(TSMatrix*)malloc(sizeof8、(TSMatrix)))==NULL)returnprintf("APPLYERROR!");//申请三元组的空间,失败则打印错误信息input(a);printf("theoriginalmatrix:");//原先的矩阵printfMa
7、)printf("t%dt%dt%d",tb[i].c,tb[i].r,tb[i].e);}intmain(){ElemTypea[MAXSIZE][MAXSIZE],b[MAXSIZE][MAXSIZE]={0};Tripleta[MAXSIZE],tb[MAXSIZE];TSMatrix*Ma,*Mb;if((Ma=(TSMatrix*)malloc(sizeof(TSMatrix)))==NULL)returnprintf("APPLYERROR!");if((Mb=(TSMatrix*)malloc(sizeof
8、(TSMatrix)))==NULL)returnprintf("APPLYERROR!");//申请三元组的空间,失败则打印错误信息input(a);printf("theoriginalmatrix:");//原先的矩阵printfMa
此文档下载收益归作者所有