void addTSMatrix(TSMatrix &A, TSMatrix &B, TSMatrix *C)
{
int row_a, row_b,col_a, col_b, index_a, index_b, index_c
C->m = A.m
C->n = A.n
//同时遍历两个三元组,开始都为1,因为0位置未存元素,当A或者B中其一元素取完循环终止
for(index_a=1,index_b=1,index_c=1
{
row_a = A.data[index_a].row
row_b = B.data[index_b].row
col_a = A.data[index_a].col
col_b = B.data[index_b].col
//比较行数先判断是否来自同一行
if(row_a>row_b)//B的行号小于A直接将B中元素加入C矩阵
{
//复制B到C
C->data[index_c].row = B.data[index_b].row
C->data[index_c].col = B.data[index_b].col
C->data[index_c].e = B.data[index_b].e
index_b++
index_c++
}
else if(row_a<row_b)//B的行号大于A直接将A中元素加入C矩阵
{
//复制A到C
C->data[index_c].row = A.data[index_a].row
C->data[index_c].col = A.data[index_a].col
C->data[index_c].e = A.data[index_a].e
index_a++
index_c++
}
else//行号相同时
{
if(col_a>col_b)//B的列号小于A直接将B中元素加入C矩阵
{
//复制B到C
C->data[index_c].row = B.data[index_b].row
C->data[index_c].col = B.data[index_b].col
C->data[index_c].e = B.data[index_b].e
index_b++
index_c++
}
else if(col_a<col_b)//B的列号小于A直接将B中元素加入C矩
{
//复制A到C
C->data[index_c].row = A.data[index_a].row
C->data[index_c].col = A.data[index_a].col
C->data[index_c].e = A.data[index_a].e
index_a++
index_c++
}
else//相等
{
//判断元素相加是否为零
if((A.data[index_a].e+B.data[index_b].e))//相加不为零
{
C->data[index_c].row = A.data[index_a].row
C->data[index_c].col = A.data[index_a].col
C->data[index_c].e = A.data[index_a].e + B.data[index_b].e
index_c++
}
//无论相加是否为零都执行
index_a++
index_b++
}
}
}
while (index_a <= A.len)//B取完A未取完
{
//将A中所剩元素依次加入到C中
C->data[index_c].row = A.data[index_a].row
C->data[index_c].col = A.data[index_a].col
C->data[index_c].e = A.data[index_a].e
index_a++
index_c++
}
while (index_b <= B.len)//A取完B未取完
{
//将A中所剩元素依次加入到C中
C->data[index_c].row = B.data[index_b].row
C->data[index_c].col = B.data[index_b].col
C->data[index_c].e = B.data[index_b].e
index_b++
index_c++
}
C->len = index_c - 1
}