c语言实现1.建立三元组矩阵,实现矩阵的输入、输出的函数; 2.输入两个稀疏矩阵,计算两个矩阵的和并将结果输出。 数据类型定义 : #define Maxsize 100 typedef struct{ int i,j; Elemtype v; }Triple; typedef struct { Triple data[Maxsize+1]; int m,n,t; }TSmatrix;
时间: 2024-03-01 18:51:18 浏览: 72
好的,下面是实现这两个功能的代码:
```c
#include <stdio.h>
#include <stdlib.h>
#define Maxsize 100
typedef struct {
int i, j;
int v;
} Triple;
typedef struct {
Triple data[Maxsize + 1];
int m, n, t;
} TSmatrix;
/* 三元组矩阵输入函数 */
void input(TSmatrix *M) {
printf("请输入矩阵的行数、列数和非零元素个数:\n");
scanf("%d %d %d", &(M->m), &(M->n), &(M->t));
printf("请输入非零元素的行、列、值:\n");
for (int i = 1; i <= M->t; i++) {
scanf("%d %d %d", &(M->data[i].i), &(M->data[i].j), &(M->data[i].v));
}
}
/* 三元组矩阵输出函数 */
void output(TSmatrix M) {
int k = 1;
for (int i = 1; i <= M.m; i++) {
for (int j = 1; j <= M.n; j++) {
if (i == M.data[k].i && j == M.data[k].j) {
printf("%d ", M.data[k].v);
k++;
} else {
printf("0 ");
}
}
printf("\n");
}
}
/* 两个稀疏矩阵相加函数 */
void add(TSmatrix M1, TSmatrix M2, TSmatrix *M3) {
int i = 1, j = 1, k = 1;
while (i <= M1.t && j <= M2.t) {
if (M1.data[i].i < M2.data[j].i) {
M3->data[k] = M1.data[i];
i++;
k++;
} else if (M1.data[i].i > M2.data[j].i) {
M3->data[k] = M2.data[j];
j++;
k++;
} else {
if (M1.data[i].j < M2.data[j].j) {
M3->data[k] = M1.data[i];
i++;
k++;
} else if (M1.data[i].j > M2.data[j].j) {
M3->data[k] = M2.data[j];
j++;
k++;
} else {
M3->data[k].i = M1.data[i].i;
M3->data[k].j = M1.data[i].j;
M3->data[k].v = M1.data[i].v + M2.data[j].v;
i++;
j++;
k++;
}
}
}
while (i <= M1.t) {
M3->data[k] = M1.data[i];
i++;
k++;
}
while (j <= M2.t) {
M3->data[k] = M2.data[j];
j++;
k++;
}
M3->m = M1.m;
M3->n = M1.n;
M3->t = k - 1;
}
int main() {
TSmatrix M1, M2, M3;
input(&M1);
input(&M2);
add(M1, M2, &M3);
output(M3);
return 0;
}
```
上述代码中,我们定义了两个结构体,`Triple` 表示三元组,`TSmatrix` 表示稀疏矩阵。在 `input` 函数中,我们首先输入矩阵的行数、列数和非零元素个数,然后输入非零元素的行、列、值。在 `output` 函数中,我们遍历矩阵的每一个元素,如果当前位置是一个非零元素,则输出其值,否则输出 0。
在 `add` 函数中,我们使用了归并排序的思想,将两个矩阵的非零元素按行、列递增的顺序排序,然后依次比较两个矩阵的元素,如果行号和列号相同,则将对应位置的值相加。最后,将结果保存在第三个矩阵中,并输出。
希望这些代码可以帮助您解决问题。如果您还有其他问题,请继续提问。
阅读全文