1.编写程序,实现利用三元组表进行两个稀疏矩阵相加的算法。
要求:(1)随机产生两个可相加的稀疏矩阵(二维);
(2)将产生的稀疏矩阵用两个三元组表的顺序存储结构存储;
(3)将两稀疏矩阵相加的结果存储在第三个三元组表中。
算法自己也知道~但怎样编程啊~
#define MaxSize 10 //用户自定义
typedef int DataType; //用户自定义
typedef struct
{ //定义三元组
int i,j;
DataType v;
}TriTupleNode;
typedef struct
{ //定义三元组表
TriTupleNode data[MaxSize];
int m,n,t;//矩阵行,列及三元组表长度
}TriTupleTable;
//以下为矩阵加算法
void AddTriTuple( TriTupleTable *A, TriTupleTable *B, TriTupleTable *C)
{//三元组表表示的稀疏矩阵A,B相加
int k,l;
DataType temp;
C->m=A->m;//矩阵行数
C->n=A->n;//矩阵列数
C->t=0; //三元组表长度
k=0; l=0;
while (k<A->t&&l<B->t)
{if((A->data[k].i==B->data[l].i)&&(A->data[k].j==B->data[l].j))
{temp=A->data[k].v+B->data[l].v;
if (!temp)//相加不为零,加入C
{C->data[c->t].i=A->data[k].i;
C->data[c->t].j=A->data[k].j;
C->data[c->t++].v=temp;
}
k++;l++;
}
if ((A->data[k].i==B->data[l].i)&&(A->data[k].j<B->data[l].j))
||(A->data[k].i<B->data[l].i)//将A中三元组加入C
{C->data[c->t].i=A->data[k].i;
C->data[c->t].j=A->data[k].j;
C->data[c->t++].v=A->data[k].v;
k++;
}
if ((A->data[k].i==B->data[l].i)&&(A->data[k].j>B->data[l].j))
||(A->data[k].i>B->data[l].i)//将B中三元组加入C
{C->data[c->t].i=B->data[l].i;
C->data[c->t].j=B->data[l].j;
C->data[c->t++].v=B->data[l].v;
l++;
}
}
while (k<A->t)//将A中剩余三元组加入C
{C->data[c->t].i=A->data[k].i;
C->data[c->t].j=A->data[k].j;
C->data[c->t++].v=A->data[k].v;
k++;
}
while (l<B->t)//将B中剩余三元组加入C
{C->data[c->t].i=B->data[l].i;
C->data[c->t].j=B->data[l].j;
C->data[c->t++].v=B->data[l].v;
l++;
}
}