假设稀疏矩阵A和B均以三元组的顺序作为存储结构

来源:百度知道 编辑:UC知道 时间:2024/07/07 16:22:48
数据结构C语言
。试写出矩阵相加的算法,另设三元组表C存放结果矩阵。

*/#include <stdio.h>#include <stdlib.h>#define MAXSIZE 20typedef 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