稀疏矩阵A和B均以三元组表作为储存结构时,试写出矩阵相加算法,其结果存放在三元组表C中

2022-04-11 08:00:10   第一文档网     [ 字体: ] [ 阅读: ] [ 文档下载 ]
说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。下载word有问题请添加QQ:admin处理,感谢您的支持与谅解。点击这里给我发消息

#第一文档网# 导语】以下是®第一文档网的小编为您整理的《稀疏矩阵A和B均以三元组表作为储存结构时,试写出矩阵相加算法,其结果存放在三元组表C中》,欢迎阅读!
三元,矩阵,相加,稀疏,算法

/*当具有相同行数和列数的稀疏矩阵A和B均以三元组表作为储存结构时,试写出矩阵相加算法,其结果存放在

三元组表C中。

*/

#include <stdio.h>

#include <stdlib.h>

#define MAXSIZE 20

typedef struct

{

int i,j;

int v;

}node;

typedef struct

{

int m,n,t;

node data[MAXSIZE];

}Spmatrix;

void SpmInit(Spmatrix *S) //三元组表初始化

{

int i;

printf("请输入行数、列数以及数据个数:\n");

scanf("%d%d%d",&S->m,&S->n,&S->t);

printf("请输入数据元素:\n");

for(i=0;i<S->t;i++)

scanf("%d%d%d",&S->data[i].i,&S->data[i].j,&S->data[i].v);

}

void SpmAdd(Spmatrix *A,Spmatrix *B,Spmatrix *C)

{

int i=0,j=0,j1=0,j2=0; //j,j1,j2分别指向C,A,B的当前元素

C->m=A->m; //将C的行列赋值为A的行列

C->n=A->n;

C->t=A->t+B->t; //将C的数据总数赋值为A和B的总数和

for(i=0;i<C->t;i++) //最坏的情况下,循环C->t次

{

if(j1>=A->t&&j2<B->t) //如果A的数据已经读取完,则直接将B当前值赋值给C,j2后移

{

C->data[j]=B->data[j2];

j2++;

}

else if(j2>=B->t&&j1<A->t) //如果B的数据已经读取完,则直接将A当前值赋值给C,j1后移

{

C->data[j]=A->data[j1];

j1++;

}

else if(j1>=B->t&&j2>=B->t) //如果A,B都已经操作完,但循环为结束,则直接结束循环

break;

else

{ //先比较行编号

if(A->data[j1].i<B->data[j2].i)//如果A当前元素的行小于B的,则赋值给C

{

C->data[j]=A->data[j1];

j1++;

}

else if(A->data[j1].i>B->data[j2].i)//如果B当前元素的行小于A的,则赋值给C

{

C->data[j]=B->data[j2];

j2++;

}

else //否则,判断列编号

{

if(A->data[j1].j<B->data[j2].j)//如果A当前元素的列小于B的,则赋值给C

{

C->data[j]=A->data[j1];

j1++;

}

else if(A->data[j1].j>B->data[j2].j)//如果B当前元素的列小于A的,则赋值给C

{

C->data[j]=B->data[j2];

j2++;

}

else //否则,则说明A和B的当前元素位置相同,则值相加,赋值给C

{

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++;

}

}

}

if(C->data[j].v==0)

continue;

j++;

}

C->t=j;

}

void Print(Spmatrix *S) //输出三元组表

{

int i=0;

for(i=0;i<S->t;i++)

printf("%3d%3d%3d\n",S->data[i].i,S->data[i].j,S->data[i].v);

}

void main()

{

Spmatrix *A,*B,*C;

A=(Spmatrix *)malloc(sizeof(Spmatrix));

B=(Spmatrix *)malloc(sizeof(Spmatrix));

C=(Spmatrix *)malloc(sizeof(Spmatrix));

SpmInit(A);

SpmInit(B);

SpmAdd(A,B,C);

Print(C);

}

本文来源:https://www.dywdw.cn/01e8786db007e87101f69e3143323968011cf4a3.html

相关推荐
推荐阅读