C语言稀疏矩阵三元组加法
时间: 2023-10-28 09:07:19 浏览: 248
三元组实现稀疏矩阵的加法
C语言稀疏矩阵三元组加法的实现可以分为以下几个步骤:
1. 定义稀疏矩阵三元组结构体,包括行数、列数、非零元素个数和三个数组:行下标数组、列下标数组和值数组。
2. 输入两个稀疏矩阵三元组,分别存储在两个结构体中。
3. 判断两个稀疏矩阵是否可以相加,即行数和列数是否相等。
4. 定义一个新的稀疏矩阵三元组结构体,用于存储相加后的结果。
5. 遍历两个稀疏矩阵的非零元素,将它们对应位置的值相加,并将结果存储在新的结构体中。
6. 如果某个稀疏矩阵还有剩余的非零元素,则将它们直接复制到新的结构体中。
7. 输出新的稀疏矩阵三元组。
以下是C语言稀疏矩阵三元组加法的示例代码:
```
#include <stdio.h>
#define MAXSIZE 100
typedef struct {
int row;
int col;
int val;
} Triple;
typedef struct {
int row;
int col;
int num;
Triple data[MAXSIZE];
} TSMatrix;
void CreateMatrix(TSMatrix *M)
{
int i, j, k, val;
printf("请输入矩阵的行数、列数和非零元素个数:\n");
scanf("%d%d%d", &M->row, &M->col, &M->num);
printf("请输入矩阵的非零元素:\n");
for (k = 0; k < M->num; k++) {
scanf("%d%d%d", &i, &j, &val);
M->data[k].row = i;
M->data[k].col = j;
M->data[k].val = val;
}
}
void AddMatrix(TSMatrix M1, TSMatrix M2, TSMatrix *M)
{
int i, j, k, p, q;
if (M1.row != M2.row || M1.col != M2.col) {
printf("两个矩阵无法相加!\n");
return;
}
M->row = M1.row;
M->col = M1.col;
k = 0;
p = 0;
q = 0;
while (p < M1.num && q < M2.num) {
if (M1.data[p].row < M2.data[q].row || (M1.data[p].row == M2.data[q].row && M1.data[p].col < M2.data[q].col)) {
M->data[k] = M1.data[p];
p++;
} else if (M1.data[p].row > M2.data[q].row || (M1.data[p].row == M2.data[q].row && M1.data[p].col > M2.data[q].col)) {
M->data[k] = M2.data[q];
q++;
} else {
M->data[k].row = M1.data[p].row;
M->data[k].col = M1.data[p].col;
M->data[k].val = M1.data[p].val + M2.data[q].val;
p++;
q++;
}
k++;
}
while (p < M1.num) {
M->data[k] = M1.data[p];
p++;
k++;
}
while (q < M2.num) {
M->data[k] = M2.data[q];
q++;
k++;
}
M->num = k;
}
void PrintMatrix(TSMatrix M)
{
int i, j, k;
k = 0;
for (i = 1; i <= M.row; i++) {
for (j = 1; j <= M.col; j++) {
if (k < M.num && M.data[k].row == i && M.data[k].col == j) {
printf("%d ", M.data[k].val);
k++;
} else {
printf("0 ");
}
}
printf("\n");
}
}
int main()
{
TSMatrix M1, M2, M;
CreateMatrix(&M1);
CreateMatrix(&M2);
AddMatrix(M1, M2, &M);
printf("矩阵相加的结果为:\n");
PrintMatrix(M);
return 0;
}
```
阅读全文