#includestdio.h#defineMAXSIZE100/*非零元个数的最大值*/typedefstructtriple{inti,j;/*行下标,列下标*/inte;/*非零元素值*/}triple;typedefstructtsmatrix{tripledata[MAXSIZE+1];/*非零元三元组表,data[0]未用*/intmu,nu,tu;/*矩阵的行数、列数和非零元个数*//*各列第一个非零元的位置表rpos[0]未用*/}rlsmatrix;createsmatrix(rlsmatrix*M){/*创建稀疏矩阵M*/inte,i,m,n;M-data[0].i=0;/*为以下比较顺序做准备*/printf(请输入矩阵的行数,列数,和非零元素的个数:);scanf(%d,&M-mu);scanf(%d,&M-nu);scanf(%d,&M-tu);for(i=1;i=M-tu;i++){printf(请按行序顺序输入第%d个非零元素所在的行(1~%d),列(1~%d),元素值:,i,M-mu,M-nu);scanf(%d,&m);scanf(%d,&n);scanf(%d,&e);if(m1||mM-mu||n1||nM-nu)/*行或列超出范围*/{printf(行或列超出范围);getch();exit();}if(mM-data[i-1].i||m==M-data[i-1].i&&n=M-data[i-1].j)/*行或列的顺序有错*/{printf(行或列的顺序有错);getch();exit();}M-data[i].i=m;M-data[i].j=n;M-data[i].e=e;}}voidtransposesmatrix(rlsmatrixM,rlsmatrix*T){/*cpos存放每列的第一个非零元素的地址,temp中间变量*/inti,m,*cpos,*temp,k=0;T-mu=M.nu;T-nu=M.mu;T-tu=M.tu;cpos=(int*)malloc(M.mu*sizeof(int));if(cpos==NULL)exit();temp=(int*)malloc(M.mu*sizeof(int));if(temp==NULL)exit();/*对cpos对初始化,初值为0*/*(cpos+1)=0;for(i=1;i=M.nu;i++){for(m=1;m=M.tu;m++){if(M.data[m].j==i)k++;}temp[i]=k;if(i==1&&k!=0)*(cpos+i)=1;/*为cpos赋值*/if(i1)*(cpos+i)=*(temp+i-1)+1;}free(temp);for(i=1;i=M.tu;i++)/*进行转置*/{T-data[*(cpos+M.data[i].j)].i=M.data[i].j;T-data[*(cpos+M.data[i].j)].j=M.data[i].i;T-data[*(cpos+M.data[i].j)].e=M.data[i].e;(*(cpos+M.data[i].j))++;}free(cpos);}main(){RLSMatrixM,N,Q;charch;printf(***************************\n);printf(****\n);printf(**稀疏矩阵运算器**\n);printf(**---------------------**\n);printf(***************************\n);printf(_____________________________________________________________________\n);printf(|请选择|\n);printf(|A.转置Y.继续运算N.结束运算|\n);printf(|_____________________________________________________________________|\n\n);printf(\2输入数字时请用逗号隔开!\n\n);printf(-);scanf(%c,&ch);while(ch!='N'){//进行循环运算switch(ch){//进行运算选择case'A':{printf(请输入要转置的矩阵:\n\n);ScanRLSMatrix(&M);printf(输入的要转置的矩阵为:\n\n);PrintRLSMatrix(M);FasttransposeRLSMatrix(M,&Q);printf(转置矩阵为:\n\n);PrintRLSMatrix(Q);printf(是否继续运算(Y/N)?\n\n);printf(-);ch=getchar();}break;case'Y':{printf(请选择运算\n);printf(-);ch=getchar();}break;default:printf(-);ch=getchar();break;}}printf(运算结束!\n\n);printf(\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1谢谢使用!\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\n\n);getch();}