数据结构—三元组表法实现稀疏矩阵的转置

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

#includestdio.h#defineN100typedefstruct{inti,j;inte;}tsMatrix;typedefstruct{tsMatrixdata[N];/*最大长度为N*/intm,n,tu;//行、列、非零元素的个数}TSMatrix;voidFastTransposeTSMatrix(TSMatrixA,TSMatrix*B)/*基于矩阵的三元组表示,采用一次定位快速转置法,将矩阵A转置为矩阵B*/{intcol,p,q,t;intnum[N],position[N];B-m=A.n;B-n=A.m;B-tu=A.tu;if(B-tu){for(col=1;col=A.n;++col)num[col]=0;for(t=1;t=A.tu;++t)++num[A.data[t].j];//采用数组计数法计算每一列的非零元素的个数position[1]=1;for(col=2;col=A.n;++col)//求col列中第一个非零元素在B.data[]中的位置position[col]=position[col-1]+num[col-1];for(p=1;p=A.tu;++p)//将被转置的三元组表A扫描一次,实现矩阵转置{col=A.data[p].j;q=position[col];B-data[q].i=A.data[p].j;//行列互换,元素赋值B-data[q].j=A.data[p].i;B-data[q].e=A.data[p].e;++position[col];//令position[col]指向A中本列下一个非零元素在B中的存储位置}}}voidoutputTSMatrix(TSMatrix*M){intp,q;intt=1;for(p=1;p=M-m;p++){for(q=1;q=M-n;q++){if(M-data[t].i==p&&M-data[t].j==q){printf(%d,M-data[t].e);t++;}elseprintf(0);}printf(\n);}}voidmain(){TSMatrixA,T;intk;printf(请输入矩阵的大小\n:);printf(它的行:);scanf(%d,&A.m);printf(它的列:);scanf(%d,&A.n);printf(请输入非零元素的个数:);scanf(%d,&A.tu);printf(请输入三元组表(格式为:行号列号元素值):\n);for(k=1;k=A.tu;k++){scanf(%d%d%d,&A.data[k].i,&A.data[k].j,&A.data[k].e);}printf(原矩阵:\n);outputTSMatrix(&A);FastTransposeTSMatrix(A,&T);printf(转置后的矩阵:\n);outputTSMatrix(&T);}

1 / 2
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功