用C语言完成当具有相同行数和列数的稀疏矩阵 A 和 B 均以三元组表作为存储结构时,试写出矩阵相加算法,其结果存放在三元组表 C 中并美观输出结果。
时间: 2024-11-22 11:40:12 浏览: 19
数据结构C语言版-稀疏矩阵的三元组顺序表存储表示和实现最新文档.doc
在C语言中,当我们处理稀疏矩阵时,通常使用动态数组(如`struct triplet`)来表示矩阵的非零元素。首先,我们需要定义一个三元组结构:
```c
typedef struct {
int row;
int col;
double value;
} triplet;
```
然后可以编写一个函数来进行矩阵相加:
```c
void sparse_matrix_add(triplet* A, int m, int n, triplet* B, int mB, int nB, triplet* C, int* result_size) {
*result_size = 0; // 初始化结果矩阵大小
// 遍历A和B的非零元素
for (int i = 0; i < m && i < mB; i++) {
for (int j = 0; j < n && j < nB; j++) {
if (A[i].row == B[i].row && A[i].col == B[i].col) {
// 如果位置相同,将值相加
C[(*result_size)].row = A[i].row;
C[(*result_size)].col = A[i].col;
C[(*result_size)].value = A[i].value + B[i].value;
(*result_size)++;
}
}
}
// 输出结果矩阵(这里只是一个简单的打印,实际应用需要更复杂的数据结构)
printf("Matrix C (size %d):\n", *result_size);
for (int k = 0; k < *result_size; k++) {
printf("(%d,%d) -> %.2lf\n", C[k].row, C[k].col, C[k].value);
}
}
```
在这个函数中,我们假设输入的两个矩阵A和B的行数和列数相同,并且都是按照相同的顺序存储非零元素(即先按行再按列)。如果需要处理不同大小的矩阵,需要添加额外的检查。
阅读全文