稀疏矩阵的三元组表示c语言写个完整代码
时间: 2024-11-12 08:16:54 浏览: 5
稀疏矩阵运算器(C语言实现,代码完整,可读性很好)
5星 · 资源好评率100%
稀疏矩阵是一种在计算机科学中用于存储密集型矩阵的高效数据结构,其中大部分元素为零。三元组表示法(也称为坐标列表或CCOO)通常用于这种存储,它使用三个数组:行索引、列索引和值。以下是使用C语言实现的一个简单三元组稀疏矩阵的示例:
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct {
int row; // 行索引
int col; // 列索引
double value; // 对应的值
} SparseMatrixTriple;
// 创建一个新的稀疏矩阵
SparseMatrixTriple** createSparseMatrix(int numRows, int numCols) {
if (numRows <= 0 || numCols <= 0) {
printf("Invalid dimensions\n");
return NULL;
}
SparseMatrixTriple **matrix = malloc(numRows * sizeof(SparseMatrixTriple*));
for (int i = 0; i < numRows; i++) {
matrix[i] = malloc(numCols * sizeof(SparseMatrixTriple));
}
return matrix;
}
// 添加元素到矩阵
void addElement(SparseMatrixTriple** matrix, int rowIndex, int colIndex, double value) {
if (matrix[rowIndex] != NULL && matrix[rowIndex][colIndex].value != 0) {
printf("Value already exists at (%d,%d)\n", rowIndex, colIndex);
return;
}
matrix[rowIndex][colIndex] = (SparseMatrixTriple) {rowIndex, colIndex, value};
}
// 打印矩阵
void printSparseMatrix(SparseMatrixTriple** matrix, int numRows, int numCols) {
for (int i = 0; i < numRows; i++) {
for (int j = 0; j < numCols; j++) {
if (matrix[i][j].value != 0) {
printf("(%d,%d): %.2lf ", matrix[i][j].row, matrix[i][j].col, matrix[i][j].value);
}
}
printf("\n");
}
}
int main() {
int numRows = 5, numCols = 6;
SparseMatrixTriple** sparseMatrix = createSparseMatrix(numRows, numCols);
// 添加一些非零元素
addElement(sparseMatrix, 0, 1, 4.5);
addElement(sparseMatrix, 1, 3, 2.7);
addElement(sparseMatrix, 2, 4, 1.0);
// 打印矩阵
printSparseMatrix(sparseMatrix, numRows, numCols);
// 清理内存
for (int i = 0; i < numRows; i++) {
free(matrix[i]);
}
free(matrix);
return 0;
}
```
这个程序首先创建了一个稀疏矩阵,并通过`addElement`函数添加了一些非零元素。然后,通过`printSparseMatrix`函数展示了稀疏矩阵的内容。注意,在实际使用中,你需要处理矩阵的生命周期管理,包括内存分配和释放。
阅读全文