设稀疏矩阵A 和B 均以三元组顺序表作为存储结构。试写出计算矩阵相加C=A+B 的算法,其中,C 是存放结果的三元组表。算法思想
时间: 2024-04-30 17:17:15 浏览: 92
:1. 初始化三元组表 C 为空表;
2. 从 A 和 B 中分别取出第一个非零元素;
3. 如果 A 和 B 中取出的元素的行标和列标相同,则将它们的值相加,并将结果加入 C 中,同时从 A 和 B 中分别取出下一个非零元素;
4. 如果 A 中元素的行标和列标小于 B 中元素的行标和列标,将 A 中元素加入 C 中,并从 A 中取出下一个元素;
5. 如果 B 中元素的行标和列标小于 A 中元素的行标和列标,将 B 中元素加入 C 中,并从 B 中取出下一个元素;
6. 循环执行步骤 3~5,直到 A 和 B 中的所有元素均已加入 C 中;
7. 返回结果三元组表 C。
以下是代码实现:
```
void addSparseMatrix(SparseMatrix a, SparseMatrix b, SparseMatrix& c) {
if (a.cols != b.cols || a.rows != b.rows) {
printf("Error: the two sparse matrices have different dimensions.\n");
return;
}
int ai = 1, bi = 1;
c.rows = a.rows;
c.cols = a.cols;
c.nonzero = 0;
while (ai <= a.nonzero && bi <= b.nonzero) {
if (a.data[ai].row < b.data[bi].row || a.data[ai].row == b.data[bi].row && a.data[ai].col < b.data[bi].col) {
c.data[++c.nonzero] = a.data[ai++];
} else if (a.data[ai].row == b.data[bi].row && a.data[ai].col == b.data[bi].col) {
int val = a.data[ai].value + b.data[bi].value;
if (val != 0) {
c.data[++c.nonzero] = {a.data[ai].row, a.data[ai].col, val};
}
++ai;
++bi;
} else {
c.data[++c.nonzero] = b.data[bi++];
}
}
while (ai <= a.nonzero) {
c.data[++c.nonzero] = a.data[ai++];
}
while (bi <= b.nonzero) {
c.data[++c.nonzero] = b.data[bi++];
}
}
```
阅读全文