实现稀疏矩阵的三元组表示以及转置算法问题
结果输不出请指教
程序代码:
//主函数
#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;
}







