实现稀疏矩阵的三元组表示以及转置算法问题
结果输不出请指教程序代码:
//主函数 #include<iostream> #include"men.h" #include"triple.h" #define elemtype int using namespace std; typedef int status; int main() { char y,a,b,c; void men(); tsmatrix M,T; menu(); cin>>y; switch(y) { case 'a': M=creatematrix(); cout<<"完成创建操作"<<endl; break; case 'b': T=transposesmtrix(M,T); cout<<"完成矩阵转置操作"<<endl; break; case 'c': print(T); cout<<"完成操作"<<endl; break; } return 0; }
程序代码:
//头文件 #include<iostream> using namespace std; void menu() { cout<<" *****************************************************************\n"; cout<<" ****************** ******************\n"; cout<<" * a:创建矩阵 b:转置 *\n"; cout<<" * c:打印矩阵 d: *\n"; cout<<" * e: f: *\n"; cout<<" * g: h:退出 *\n"; cout<<" ****************** ******************\n"; cout<<" *****************************************************************\n"; cout<<" 请输入命令:"; }
程序代码:
//头文件 #include<stdio.h> #define elemtype int using namespace std; typedef int status; #define MAXSIZE 12500 //假设非零元个数的最大值 typedef struct { int i,j; //该非零元的行列下标 elemtype e; }Triple; typedef struct { Triple data[MAXSIZE]; int mu, nu, tu; //矩阵的行、列数和非零元个数 }tsmatrix; tsmatrix M,T; //创建矩阵 tsmatrix creatematrix() { tsmatrix M; int n; printf("输入矩阵的行数,列数,个数:\n"); scanf("%d%d%d",&M.mu,&M.nu,&M.tu); printf("输入非零元的值(行数、列数和值):\n"); for(n=0;n<M.tu;n++) scanf("%d%d%d",&M.data[n].i,&M.data[n].j,&M.data[n].e); return M; } //打印矩阵 void print(tsmatrix &M) { int x,y,n,k; for(x=0;x<M.mu;x++) { for(y=0;y<M.nu;y++) { k=0; for(n=0;n<M.tu;n++) if((M.data[n].i==x)&&(M.data[n].j==y)) { printf("%3d",M.data[n].e); k=1; } if(k==0) printf("%3d",k); } printf("\n"); } } //转置矩阵 tsmatrix transposesmtrix(tsmatrix M,tsmatrix &T) { int q,col,p; T.mu=M.nu; T.nu=M.mu; T.tu=M.tu; if(T.tu) { q=0; for(col=0;col<M.nu;col++) for(p=0;p<M.tu;p++) if(M.data[p].j==col) { T.data[q].i=M.data[p].j; T.data[q].j=M.data[p].i; T.data[q].e=M.data[p].e; ++q; } } return T; }