输入两个稀疏矩阵,计算两个矩阵的和并将结果输出,用define Maxsize 100 typedef struct{ int i,j; Elemtype v; }Triple; typedef struct { Triple data[Maxsize+1]; int m,n,t; }TSmatrix;
时间: 2024-02-05 12:03:03 浏览: 63
稀疏矩阵求和
3星 · 编辑精心推荐
好的,可以使用以下代码实现:
```
#include <stdio.h>
#include <stdlib.h>
#define Maxsize 100
typedef int Elemtype;
typedef struct {
int i, j;
Elemtype v;
} Triple;
typedef struct {
Triple data[Maxsize+1];
int m, n, t;
} TSmatrix;
void CreateMatrix(TSmatrix *M) {
int row, col, value;
printf("请输入矩阵的行数、列数和非零元素个数:\n");
scanf("%d%d%d", &(M->m), &(M->n), &(M->t));
printf("请输入矩阵的三元组表示:\n");
for (int k = 1; k <= M->t; k++) {
scanf("%d%d%d", &row, &col, &value);
M->data[k].i = row;
M->data[k].j = col;
M->data[k].v = value;
}
}
void PrintMatrix(TSmatrix M) {
int k = 1;
for (int i = 1; i <= M.m; i++) {
for (int j = 1; j <= M.n; j++) {
if (M.data[k].i == i && M.data[k].j == j) {
printf("%d ", M.data[k].v);
k++;
} else {
printf("0 ");
}
}
printf("\n");
}
}
void AddMatrix(TSmatrix A, TSmatrix B, TSmatrix *C) {
int i = 1, j = 1, k = 1;
while (i <= A.t && j <= B.t) {
if (A.data[i].i < B.data[j].i) {
C->data[k++] = A.data[i++];
} else if (A.data[i].i > B.data[j].i) {
C->data[k++] = B.data[j++];
} else {
if (A.data[i].j < B.data[j].j) {
C->data[k++] = A.data[i++];
} else if (A.data[i].j > B.data[j].j) {
C->data[k++] = B.data[j++];
} else {
C->data[k].i = A.data[i].i;
C->data[k].j = A.data[i].j;
C->data[k].v = A.data[i].v + B.data[j].v;
i++;
j++;
k++;
}
}
}
while (i <= A.t) {
C->data[k++] = A.data[i++];
}
while (j <= B.t) {
C->data[k++] = B.data[j++];
}
C->m = A.m;
C->n = A.n;
C->t = k - 1;
}
int main() {
TSmatrix A, B, C;
printf("请输入矩阵A:\n");
CreateMatrix(&A);
printf("请输入矩阵B:\n");
CreateMatrix(&B);
AddMatrix(A, B, &C);
printf("矩阵A加上矩阵B的结果为:\n");
PrintMatrix(C);
return 0;
}
```
这段代码中,我们定义了三个结构体:`Triple` 表示三元组,`TSmatrix` 表示稀疏矩阵,其中 `data` 数组存储了所有非零元素的三元组表示,`m`、`n`、`t` 分别表示矩阵的行数、列数和非零元素个数。
`CreateMatrix` 函数用于创建稀疏矩阵,通过输入矩阵的行数、列数和非零元素个数,以及每个非零元素的行、列和值来初始化稀疏矩阵。
`PrintMatrix` 函数用于打印稀疏矩阵,它按照普通矩阵的形式输出稀疏矩阵。
`AddMatrix` 函数用于计算两个稀疏矩阵的和,它采用了类似于合并排序的方法,将两个矩阵的非零元素按照行和列的大小进行比较,逐个合并到一个新的稀疏矩阵中,并将相同位置的元素相加,最后得到的矩阵即为两个矩阵的和。
在主函数中,我们通过调用上述函数,先创建出两个稀疏矩阵 A 和 B,然后计算它们的和得到稀疏矩阵 C,并最终打印出矩阵 C 的结果。
阅读全文