#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);}