代码实现稀疏矩阵的三元组表存储c语言
时间: 2024-03-13 10:45:30 浏览: 75
下面是C语言实现稀疏矩阵的三元组表存储的示例:
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct {
int row;
int col;
int value;
} Triplet;
typedef struct {
int nrows;
int ncols;
int nelems;
Triplet* data;
} SparseMatrix;
SparseMatrix* create_sparse(int nrows, int ncols, int* matrix) {
SparseMatrix* sm = (SparseMatrix*)malloc(sizeof(SparseMatrix));
sm->nrows = nrows;
sm->ncols = ncols;
sm->nelems = 0;
for (int i = 0; i < nrows * ncols; i++) {
if (matrix[i] != 0) {
sm->nelems++;
}
}
sm->data = (Triplet*)malloc(sm->nelems * sizeof(Triplet));
int k = 0;
for (int i = 0; i < nrows; i++) {
for (int j = 0; j < ncols; j++) {
if (matrix[i * ncols + j] != 0) {
sm->data[k].row = i;
sm->data[k].col = j;
sm->data[k].value = matrix[i * ncols + j];
k++;
}
}
}
return sm;
}
void print_sparse(SparseMatrix* sm) {
printf("Sparse Matrix (%d x %d):\n", sm->nrows, sm->ncols);
for (int i = 0; i < sm->nelems; i++) {
printf("(%d, %d, %d)\n", sm->data[i].row, sm->data[i].col, sm->data[i].value);
}
}
void destroy_sparse(SparseMatrix* sm) {
free(sm->data);
free(sm);
}
int main() {
int matrix[3][4] = {
{1, 0, 0, 2},
{0, 3, 0, 0},
{0, 0, 4, 0}
};
SparseMatrix* sm = create_sparse(3, 4, (int*)matrix);
print_sparse(sm);
destroy_sparse(sm);
return 0;
}
```
其中,`SparseMatrix`结构体用于表示稀疏矩阵,包含四个属性:`nrows`表示矩阵的行数,`ncols`表示矩阵的列数,`nelems`表示矩阵中非零元素的个数,`data`为一个三元组数组,存储矩阵中的非零元素。
`create_sparse`函数用于将一个二维数组表示的稀疏矩阵转化为三元组表。具体实现是遍历矩阵中的每个元素,如果该元素不为0,则将其行列坐标以及值存储到一个三元组中,最后将所有三元组存储到一个数组中并返回。
`print_sparse`函数用于打印稀疏矩阵的三元组表。
`destroy_sparse`函数用于销毁稀疏矩阵的三元组表。
在`main`函数中,我们定义一个二维数组表示一个稀疏矩阵,然后调用`create_sparse`函数将其转化为三元组表,并调用`print_sparse`函数打印结果,最后调用`destroy_sparse`函数销毁稀疏矩阵的三元组表。
阅读全文