sanyuanzu.h头文件 #define max 100 typedef struct { int row,col; int e; }Triple;//定义三元组 typedef struct { Triple data[max]; int mu,nu,tu; }TSMatrix;///*定义三元组的稀疏矩阵*/ void creat( TSMatrix &M) ; void fasttrans(TSMatrix A,TSMatrix &B); void printfx(TSMatrix x); sanyuanzu.cpp文件 #include<stdio.h> #include"sanyuanzu.h" /*建立三元组的稀疏矩阵*/ void creat( TSMatrix &M) { printf("请输入稀疏矩阵的行数:"); scanf("%d",&M.mu); printf("请输入稀疏矩阵的列数:"); scanf("%d",&M.nu); printf("请输入矩阵中非零元素的个数:"); scanf("%d",&M.tu); int i; printf("请输入这%d个元素的行号和列号及其元素的值:/n",M.tu); for(i = 1; i <= M.tu; i++)scanf("%d %d %d",&M.data[i].row,&M.data[i].col,&M.data[i].e); } /*实现三元组的矩阵转置的函数*/ void fasttrans(TSMatrix A,TSMatrix &B) { int col,cpot[max],num[max],t,p,q; /*初始化矩阵B*/ B.mu=A.nu; B.nu=A.mu; B.tu=A.tu; if(B.tu) { for(col=1;col<=A.nu;++col) num[col]=0;/*初始化每一列非零元的个数*/ for(t=1;t<=A.tu;++t) ++num[A.data[t].col];/*计算每一列非零元的个数*/ cpot[1]=1; for(col=2;col<=A.nu;++col) cpot[col]=cpot[col-1]+num[col-1];//计算矩阵A每一列第一个非零元在B.data中的位置 /*实现对A中的每一个非零元进行转置*/ for(p=1;p<=A.tu;++p) { col=A.data[p].col; q=cpot[col]; B.data[q].row=A.data[p].col; B.data[q].col=A.data[p].row; B.data[q].e=A.data[p].e; ++cpot[col]; } } } /*稀疏矩阵的输出*/ void printfx(TSMatrix x) { int i,j; for(j=1;j<=x.tu;j++) { for(i=1;i<=x.mu;i++) if(x.data[j].row==i)printf("%d %d %d/n",x.data[j].row,x.data[j].col,x.data[j].e); } } main.cpp文件 #include<stdio.h> #include'"sanyuanzu.cpp" //主函数 int main(void) { TSMatrix t,s; creat(t); printf("你所输入的稀疏矩阵为:/n"); printfx(t); fasttrans(t,s); printf("转置后的稀疏矩阵为:/n"); printfx(s); return 0; } 实验结果截图: