用c语言编写程序实现稀疏矩阵的三元祖顺序表存储
时间: 2023-10-21 15:03:31 浏览: 149
好的,以下是用C语言编写程序实现稀疏矩阵的三元组顺序表存储的示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 100 // 三元组顺序表的最大长度
typedef struct {
int i, j; // 行、列下标
int e; // 元素值
} Triple;
typedef struct {
Triple data[MAXSIZE + 1]; // 三元组表,data[0]不使用
int m, n, len; // 矩阵的行数、列数、非零元素个数
} TSMatrix; // 稀疏矩阵的三元组顺序表
int CreateSMatrix(TSMatrix *M)
{
int i, j, k, e;
printf("请输入矩阵的行数、列数、非零元素个数:\n");
scanf("%d%d%d", &M->m, &M->n, &M->len);
if (M->len > MAXSIZE) {
printf("非零元素个数太多,超过了三元组顺序表的最大长度!\n");
return 0;
}
printf("请输入矩阵的非零元素(格式为:行 下标 列下标 元素值):\n");
for (k = 1; k <= M->len; k++) {
scanf("%d%d%d", &i, &j, &e);
if (i < 1 || i > M->m || j < 1 || j > M->n) {
printf("行下标或列下标越界!\n");
return 0;
}
M->data[k].i = i;
M->data[k].j = j;
M->data[k].e = e;
}
return 1;
}
void PrintSMatrix(TSMatrix M)
{
int i, j, k = 1;
for (i = 1; i <= M.m; i++) {
for (j = 1; j <= M.n; j++) {
if (k <= M.len && i == M.data[k].i && j == M.data[k].j) {
printf("%d ", M.data[k].e);
k++;
} else {
printf("0 ");
}
}
printf("\n");
}
}
int main()
{
TSMatrix M;
if (CreateSMatrix(&M)) {
printf("稀疏矩阵的三元组顺序表如下:\n");
for (int i = 1; i <= M.len; i++) {
printf("(%d,%d,%d) ", M.data[i].i, M.data[i].j, M.data[i].e);
}
printf("\n");
printf("稀疏矩阵如下:\n");
PrintSMatrix(M);
}
return 0;
}
```
在这个示例代码中,我们定义了两个结构体类型:
- `Triple`:表示三元组,包括行下标、列下标和元素值。
- `TSMatrix`:表示稀疏矩阵的三元组顺序表,包括三元组表、矩阵的行数、列数和非零元素个数。
我们通过调用 `CreateSMatrix` 函数来创建稀疏矩阵的三元组顺序表,这个函数会先读入矩阵的行数、列数和非零元素个数,然后读入每个非零元素的行下标、列下标和元素值,最后将这些三元组存储在三元组表中。
我们还定义了一个 `PrintSMatrix` 函数,用来以矩阵的形式打印稀疏矩阵,这个函数会遍历矩阵的每个元素,如果这个元素是一个非零元素,则输出它的值,否则输出 0。
在 `main` 函数中,我们先调用 `CreateSMatrix` 函数创建稀疏矩阵的三元组顺序表,然后分别打印三元组顺序表和稀疏矩阵。
需要注意的是,这个示例代码中只实现了稀疏矩阵的创建和打印,还可以根据实际需求添加其他操作,比如稀疏矩阵的加法、乘法等。
阅读全文