用三元组方式输入两个稀疏矩阵A和B,其行数和列数均对应相等,编写一个C语言程序,计算A和B之和,假设稀疏矩阵采用三元组表示
时间: 2024-06-09 09:10:02 浏览: 137
以下是一个C语言程序,实现了稀疏矩阵的三元组表示和矩阵加法操作:
```c
#include <stdio.h>
#define MAX_TERMS 100 // 假设稀疏矩阵中最多有100个非零元素
typedef struct {
int row; // 非零元素所在行
int col; // 非零元素所在列
int value; // 非零元素的值
} term;
// 稀疏矩阵加法
void sparse_matrix_add(term a[], int a_size, term b[], int b_size, term c[], int *c_size) {
int i = 0, j = 0, k = 0;
while (i < a_size && j < b_size) {
if (a[i].row < b[j].row || (a[i].row == b[j].row && a[i].col < b[j].col)) {
c[k++] = a[i++];
} else if (a[i].row > b[j].row || (a[i].row == b[j].row && a[i].col > b[j].col)) {
c[k++] = b[j++];
} else {
c[k].row = a[i].row;
c[k].col = a[i].col;
c[k++].value = a[i++].value + b[j++].value;
}
}
while (i < a_size) {
c[k++] = a[i++];
}
while (j < b_size) {
c[k++] = b[j++];
}
*c_size = k;
}
int main() {
// 示例数据
term a[] = {
{0, 0, 1},
{0, 1, 0},
{0, 3, 2},
{1, 1, 3},
{1, 2, 4},
{2, 3, 5},
{3, 0, 6},
{3, 2, 7},
{3, 3, 8}
};
int a_size = 9;
term b[] = {
{0, 1, 2},
{1, 0, 3},
{1, 2, 4},
{2, 3, 5},
{3, 2, 7},
{3, 3, 8}
};
int b_size = 6;
term c[MAX_TERMS];
int c_size;
sparse_matrix_add(a, a_size, b, b_size, c, &c_size);
printf("A+B:\n");
for (int i = 0; i < c_size; i++) {
printf("(%d, %d, %d)\n", c[i].row, c[i].col, c[i].value);
}
return 0;
}
```
程序中使用了一个 `term` 结构体表示稀疏矩阵的非零元素,三个成员分别表示非零元素所在的行、列以及值。`sparse_matrix_add` 函数实现了稀疏矩阵的加法操作,输入的参数包括两个稀疏矩阵(以三元组方式表示)、一个存储结果的数组以及一个指向结果数组大小的指针。程序中还包括了一个示例数据,可以自行修改输入数据进行测试。
阅读全文