📄 cpp1.cpp
字号:
#include<iostream.h>
#include<stdlib.h>
const int maxrows=10;
typedef int elemtype;
struct triplenode{
int row,col;//存储行号和列号
elemtype val;//存储元素值
triplenode *next;//指向同一行的下一个结点
};
struct lmatrix{
int m,n,t;//行数,列数和非零元素的个数
triplenode *vector[maxrows+1];//定义一个行指针
};
//矩阵的初始化
void initmatrix(lmatrix &M)
{
M.m=0;M.n=0;M.t=0;
for(int i=0;i<=maxrows;i++)
M.vector[i]=NULL;
}
void inputmatrix(lmatrix &M,int m, int n)//三元组的输入
{
M.m=m;M.n=n;
int row,col,val;
int k=0;
cout<<"请输入1个元组(当输入的三元组为0 0 0 时表示结束!):"<<endl;
cin>>row>>col>>val;
while(row!=0)
{
k++;
triplenode *p,*q;
if(row>m||col>n)
{
cout<<"你输入的三元组不正确,请重新输入!"<<endl;
cin>>row>>col>>val;
continue;
}
p=new triplenode;
p->row=row;
p->col=col;
p->val=val;
p->next=NULL;
q=M.vector[row];
if(q==NULL)
M.vector[row]=p;
else
{
while(q->next!=NULL)
q=q->next;
q->next=p;
}
cout<<"请输入"<<k+1<<"个元组"<<endl;
cin>>row>>col>>val;
}
M.t=k;
}
void outputmatrix(lmatrix &M)//矩阵的输出
{
int i,j;
triplenode *p;
for(i=1;i<=M.m;i++)
{for(j=1;j<=M.n;j++)
{p=M.vector[i];
while(p!=NULL&&p->col!=j)
p=p->next;
if(p==NULL)
cout<<"0"<<" ";
else
cout<<p->val<<" ";
}
cout<<endl;
}
}
lmatrix add(lmatrix &M1,lmatrix &M2)
{
if(M1.m!=M2.m||M1.n!=M2.n)
{
cerr<<"两矩阵的行数和列数不同不能相加!"<<endl;
exit(0);
}
if((M1.t==0)&&(M2.t==0))
return M1;
int k=0;
for(int i=1;i<=M1.m;i++)
{
triplenode *p1,*p2,*p;
p1=M1.vector[i];
p2=M2.vector[i];
p=p1;/*P是M矩阵的第I行的尾结点的指针*/
while(p1!=NULL&&p2!=NULL)
{
triplenode *newptr=new triplenode;
if(p1->col<p2->col)
{
*newptr=*p2;
p1->next=newptr;
k++;
p1=newptr->next;
p2=p2->next;
}
else if(p1->col>p2->col)
{
*newptr=*p2;
newptr->next=p1->next; //将新结点插入到M1中
p1->next=newptr;
p=p1;
p1=p1->next;k++;
p2=p2->next;
}
else if(p1->val+p2->val==0)
{
p1=p1->next;
p2=p2->next;
continue;
}
else
{
p1->val+=p2->val;
*newptr=*p1;
p1=p1->next;
p2=p2->next;
}
newptr->next=NULL;
if(p==NULL)
M1.vector[i]=newptr;
else
p->next=newptr;
p=newptr;
k++;
}
while((p2!=NULL)&&(p1==NULL))
{
*p1=*p2;
p1=p1->next;
p2=p2->next;
}
}
M1.t=k;
return M1;
}
void main()
{
lmatrix h1,h2,h;
int a,b;
cout<<"请输入矩阵的行数和列数:"<<endl;
cin>>a>>b;
initmatrix(h1);//初始化
inputmatrix(h1,a,b);//输入三元组
cout<<"第一个矩阵为:"<<endl;
outputmatrix(h1);//输出矩
cout<<"请输入同上矩阵同样的行数和列数:";
cin>>a>>b;
initmatrix(h2);
inputmatrix(h2,a,b);
cout<<"第二个矩阵为:"<<endl;
outputmatrix(h2);
cout<<"相加后的矩阵为:";
h=add(h1,h2) ;
cout<<endl;
outputmatrix(h);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -