c语言稀疏矩阵相加
时间: 2023-12-02 18:40:56 浏览: 139
数据结构 稀疏矩阵运算器
5星 · 资源好评率100%
根据引用,我们可以使用三元组顺序表来表示稀疏矩阵,并实现两个矩阵的相加运算。具体步骤如下:
1. 首先输入两个矩阵的行数和列数,以及非零元素的个数。
2. 然后输入每个非零元素的行、列和值,分别存储在三元组顺序表中。
3. 对于两个矩阵的相加运算,我们可以先将两个矩阵的三元组顺序表按照行和列的大小排序,然后依次比较每个非零元素的行和列,进行相应的加法运算。
4. 最后将结果矩阵以通常的阵列形式列出。
下面是一个示例代码,用于实现两个稀疏矩阵的相加运算:
```c
#include <stdio.h>
#define MAXSIZE 100
typedef struct {
int row;
int col;
int val;
} Triple;
typedef struct {
Triple data[MAXSIZE + 1];
int rows, cols, nums;
} TSMatrix;
void CreateSMatrix(TSMatrix *M) {
printf("请输入矩阵的行数、列数和非零元素的个数:\n");
scanf("%d%d%d", &M->rows, &M->cols, &M->nums);
printf("请输入每个非零元素的行、列和值:\n");
for (int i = 1; i <= M->nums; i++) {
scanf("%d%d%d", &M->data[i].row, &M->data[i].col, &M->data[i].val);
}
}
void PrintSMatrix(TSMatrix M) {
int k = 1;
for (int i = 1; i <= M.rows; i++) {
for (int j = 1; j <= M.cols; j++) {
if (M.data[k].row == i && M.data[k].col == j) {
printf("%d ", M.data[k].val);
k++;
} else {
printf("0 ");
}
}
printf("\n");
}
}
void AddSMatrix(TSMatrix M, TSMatrix N, TSMatrix *Q) {
if (M.rows != N.rows || M.cols != N.cols) {
printf("两个矩阵的行数或列数不相等,无法相加!\n");
return;
}
int i = 1, j = 1, k = 1;
while (i <= M.nums && j <= N.nums) {
if (M.data[i].row < N.data[j].row || (M.data[i].row == N.data[j].row && M.data[i].col < N.data[j].col)) {
Q->data[k++] = M.data[i++];
} else if (M.data[i].row > N.data[j].row || (M.data[i].row == N.data[j].row && M.data[i].col > N.data[j].col)) {
Q->data[k++] = N.data[j++];
} else {
int sum = M.data[i].val + N.data[j].val;
if (sum != 0) {
Q->data[k].row = M.data[i].row;
Q->data[k].col = M.data[i].col;
Q->data[k].val = sum;
k++;
}
i++;
j++;
}
}
while (i <= M.nums) {
Q->data[k++] = M.data[i++];
}
while (j <= N.nums) {
Q->data[k++] = N.data[j++];
}
Q->rows = M.rows;
Q->cols = M.cols;
Q->nums = k - 1;
}
int main() {
TSMatrix M, N, Q;
CreateSMatrix(&M);
CreateSMatrix(&N);
AddSMatrix(M, N, &Q);
printf("矩阵M:\n");
PrintSMatrix(M);
printf("矩阵N:\n");
PrintSMatrix(N);
printf("矩阵M+N:\n");
PrintSMatrix(Q);
return 0;
}
```
阅读全文