三元组实现矩阵加法

//思路:除了三元组结构体的定义和一些基本操作外,主要的就是实现函数SpmAdd(Spmatrix *a,Spmatrix *b,Spmatrix *c)。
//实现的思想和将两个递增数组归并到第三个数组上,第三个数组也是递增排列的算法思想相同。
//分别用j,j1,j2指向数组c,a,b的当前数据元素。通过比较行列的大小以行为主列为辅进行插入到数组c中,如果j1,j2所指向的行和列都相同则两者的值相加,若结果不为零则插入,否则不插入。




#include<iostream>
using namespace std;


#define MAXSIZE 20
typedef struct{
int i;
int j;
int v;
}node;


typedef struct{
int m,n,t;
node data[MAXSIZE]; 
}Spmatrix;


void SpmInit(Spmatrix *s){
int i;
cout<<"请输入矩阵行数列数和非零元素个数:";
cin>>s->m>>s->n>>s->t;
cout<<"输入三元组数据:";
for(i=0;i<s->t;i++)
cin>>s->data[i].i>>s->data[i].j>>s->data[i].v;
}


void SpmAdd(Spmatrix *a,Spmatrix *b,Spmatrix *c){
int i;
int j=0,j1=0,j2=0;//分别指向c,a,b的当前数据元素
c->m=a->m;
c->n=a->n;
c->t=a->t+b->t;
for(i=0;i<c->t;i++)
{
if(j1>a->t&&j2<b->t){
c->data[j]=b->data[j2];
j2++;
}
else if(j1<a->t&&j2>b->t){
c->data[j]=a->data[j1];
j1++;
}
else if(j1<a->t&&j2<b->t){
if(a->data[j1].i<b->data[j2].i){
c->data[j]=a->data[j1];
j1++;
}
else if(a->data[j1].i>b->data[j2].i){
c->data[j]=b->data[j2];
j2++;
}
else if(a->data[j1].j>b->data[j2].j){
c->data[j]=b->data[j2];
j2++;
}
else if(a->data[j1].j<b->data[j2].j){
c->data[j]=a->data[j1];
j1++;
}
else {
if(a->data[j1].v+b->data[j2].v){
c->data[j].i=a->data[j1].i;
c->data[j].j=a->data[j1].j;
c->data[j].v=a->data[j1].v+b->data[j2].v;
j1++;
j2++;
}
else {
j1++;
j2++;
continue;
}
}
}
 j++;
}
c->t=j;
}




void print(Spmatrix *s){
int i;
for(i=0;i<s->t;i++)
cout<<s->data[i].i<<' '<<s->data[i].j<<' '<<s->data[i].v<<endl;
}






int main(){
Spmatrix *a,*b,*c;
a=(Spmatrix *)malloc(sizeof(Spmatrix));
b=(Spmatrix *)malloc(sizeof(Spmatrix));
c=(Spmatrix *)malloc(sizeof(Spmatrix));
SpmInit(a);
SpmInit(b);
SpmInit(c);
SpmAdd(a,b,c);
print(c);
return 0;


}
  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值