#include <stdio.h>#include <stdlib.h>#include <malloc.h>#define ERROR 0;#define OK 1;#define MAXSIZE 10#define ElemType inttypedef struct...{ int i; //该非零元的行下标 int j; //该非零元的列下标 ElemType e; //元素}Triple;typedef struct...{ Triple data[MAXSIZE+1]; int mu;//矩阵的行数 int nu;//矩阵的列数 int tu;//矩阵的非零元个数}TSMatrix;//插入元素到稀疏矩阵中int Insert(TSMatrix &M,int set)...{ int i,j,e,k; scanf("%d%d%d",&i,&j,&e); for(k=1;k<=MAXSIZE;k++)...{ if(M.data[k].i==i&&M.data[k].j==j)...{ printf("输入错误,该位置已经有元素了! "); return ERROR; } } M.data[set].i=i; M.data[set].j=j; M.data[set].e=e; return OK;}//快速转置矩阵//M为原矩阵,T为新矩阵int FTSMatrix(TSMatrix M,TSMatrix &T)...{ int col; //表示M中的第col列 int num[MAXSIZE+1]; //表示M中第col列中非零元素的个数 int cpot[MAXSIZE+1]; //表示该元素应该插入的位置 T.mu=M.nu; T.nu=M.mu; T.tu=M.tu; if(T.tu)...{ for(col=1;col<=T.tu;col++)...{ num[col]=0; //初始化每行含有非零元的个数 } for(int t=1;t<=M.tu;t++)...{ ++num[M.data[t].j]; //j中记录的是元素所在的列.这个变量刚好又可以当作T行中含有的元素个数 } cpot[1]=1; for(col=2;col<=M.nu;col++)...{ cpot[col]=cpot[col-1]+num[col-1];//计算下一个存储位置 } //开始转置 for(int p=1;p<=M.tu;p++)...{ col=M.data[p].j; T.data[cpot[col]].i=M.data[p].j; T.data[cpot[col]].j=M.data[p].i; T.data[cpot[col]].e=M.data[p].e; cpot[col]++; } } return OK;}//仅仅打印非零元void Print(TSMatrix M)...{ for(int i=1;i<11;i++)...{ printf("%d %d %d ",M.data[i].i,M.data[i].j,M.data[i].e); }}//打印所有的元素void PrintAll(TSMatrix M)...{ int getElem(TSMatrix M,int m,int n); printf(" "); for(int m=0;m<M.mu;m++)...{ for(int n=0;n<M.nu;n++)...{ if(m==0)...{ printf("%3d",n); }else if(n==0)...{ printf("%3d:",m); }else...{ printf("%3d",getElem(M,m,n)); } } printf(" "); }}//返回指定位置的元素int getElem(TSMatrix M,int m,int n)...{ for(int k=1;k<=MAXSIZE;k++)...{ if(M.data[k].i==m&&M.data[k].j==n)...{ return M.data[k].e; } } return ERROR;}void main()...{ TSMatrix M; TSMatrix T; M.mu=11; M.nu=12; M.tu=MAXSIZE; printf("输入行下标/列下标/元素: "); for(int i=1;i<11;i++)...{ printf("输入第%d个元素:",i); if(!Insert(M,i)) i--; } printf("打印原始稀疏矩阵 "); PrintAll(M); printf("开始转置稀疏矩阵 "); FTSMatrix(M,T); printf("打印转置稀疏矩阵 "); PrintAll(T);}