稀疏矩阵运算器
#include
#include
#define Maxterms 50
typedef int ElemType;
struct Triple
{
int row,col;
ElemType val;
};
struct SMatrix
{
int m,n,t;
Triple sm[Maxterms];
};
void InitMatrix(SMatrix &M); void InputMatrix(SMatrix &M,int m,int n);
void OutputMatrix(SMatrix &M); SMatrix Transpose(SMatrix &M); SMatrix Add(SMatrix &M1,SMatrix &M2);
SMatrix ChengFa(SMatrix &M1,SMatrix &M2);
//主函数
void main()
{
int m,n;int ch;
cout<<"1.矩阵的转置 2.矩阵的加法运算 3.矩阵的乘法运算"<>ch;
if(ch==1)
{
SMatrix M,N;
InitMatrix(M);InitMatrix(N);
cout<<"请输入矩阵的行值m和列值n:"<>m>>n;
cout<<"请以三元组的形式输入矩阵:"<>m>>n;
cout<<"请以三元组的形式输入矩阵:"<>m>>n;
cout<<"请以三元组的形式输入矩阵:"<>m>>n;
cout<<"请以三元组的形式输入矩阵:"<>m>>n;
cout<<"请以三元组的形式输入矩阵:"<>row>>col>>val;
while(row!=0)
{
j ;
M.sm[j].row=row;
M.sm[j].col=col;
M.sm[j].val=val;
cin>>row>>col>>val;
//结束输入时需要输入三个0来终止输入
}
M.t=j;
}
//矩阵的输出
void OutputMatrix(SMatrix &M)
{
int j=1;
for(int i=1;i<=M.m;i )
{
int k;
if(i==M.sm[j].row)
{
int h,s;h=s=0;
while(i==M.sm[j].row)
{
for(k=1;kM.t) break;
}
int p;p=M.n-M.sm[j-1].col;
while(p!=0)
{
cout<<"0"<<" ";p--;
}
cout<M1.t)||(k>M2.t)) break;
}
else if(M1.sm[j].colM1.t) break;
}
else if(M1.sm[j].col>M2.sm[k].col)
{
M.sm[h].row=M2.sm[k].row;
M.sm[h].col=M2.sm[k].col;
M.sm[h].val=M2.sm[k].val;
h ;k ;
if(k>M2.t) break;
}
}
if((j>M1.t)||(k>M2.t)) break;
while(M1.sm[j].rowM1.t) break;
}
if(j>M1.t) break;
while(M1.sm[j].row>M2.sm[k].row)
{
M.sm[h].row=M2.sm[k].row;
M.sm[h].col=M2.sm[k].col;
M.sm[h].val=M2.sm[k].val;
h ;k ;
if(k>M2.t) break;
}
//if(k>M2.t) break;
}
if(j>M1.t)
while(k<=M2.t)
{
M.sm[h].row=M2.sm[k].row;
M.sm[h].col=M2.sm[k].col;
M.sm[h].val=M2.sm[k].val;
h ;k ;
}
if(k>M2.t)
while(j<=M1.t)
{
M.sm[h].row=M1.sm[j].row;
M.sm[h].col=M1.sm[j].col;
M.sm[h].val=M1.sm[j].val;
h ;j ;
}
M.t=--h;
return M;
}
//矩阵的乘法
SMatrix ChengFa(SMatrix &M1,SMatrix &M2)
{
SMatrix M,N;
InitMatrix(M);InitMatrix(N);
if(M1.n!=M2.m)
{
cout<<"左矩阵的行数和右矩阵的列数不相等,不可做乘法~"<M1.t)||(f>N.t)) break;
}
else if(M1.sm[g].colM1.t) break;
}
else if(M1.sm[g].col>N.sm[f].col)
{
f ;
if(f>N.t) break;
}
}
if(s!=0)
{
M.sm[h].row=i;
M.sm[h].col=x;
M.sm[h].val=s;
h ;
}
if(f>N.t) break;
while(x==N.sm[k].row)
{
k ;
if(k>N.t) break;
}
if(k>N.t) break;
}
if(g>M1.t) break;
while(i==M1.sm[j].row)
j ;
}
M.t=--h;
return M;
}