用C语言写稀疏矩阵的转置的代码
时间: 2024-12-12 15:29:38 浏览: 11
在C语言中,特别是使用结构体来表示稀疏矩阵的情况下,转置通常涉及到数据存储结构的改变。由于稀疏矩阵非零元素很少,我们通常会使用三元组或者自定义的数据结构来高效存储。这里是一个简单的例子,假设我们使用`struct SparseMatrix`结构来表示稀疏矩阵:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义稀疏矩阵的结构
typedef struct {
int row;
int col;
float value;
} SparseElement;
typedef struct {
int rows; // 行数
int cols; // 列数
SparseElement* data; // 矩阵元素数组
int *indices; // 非零元素索引
int nnz; // 非零元素的数量
} SparseMatrix;
// 转置函数
SparseMatrix transpose(SparseMatrix mat) {
SparseMatrix transposed = (SparseMatrix){
.rows = mat.cols,
.cols = mat.rows,
.data = malloc(sizeof(SparseElement) * mat.nnz), // 新建元素数组
.indices = malloc(sizeof(int) * mat.nnz),
.nnz = 0
};
for (int i = 0; i < mat.nnz; i++) {
transposed.data[transposed.nnz] = (SparseElement){mat.indices[i], mat.row, mat.value};
transposed.indices[transposed.nnz++] = i; // 存储原行索引作为新列索引
mat.data[i].row = mat.col; // 更新原列索引
mat.col = mat.row;
}
return transposed;
}
// 示例用法
void printSparseMatrix(SparseMatrix matrix) {
for (int i = 0; i < matrix.nnz; i++) {
printf("(%d, %d): %.2f\n", matrix.row, matrix.col, matrix.value);
}
}
int main() {
SparseMatrix original = ... // 初始化原始稀疏矩阵
SparseMatrix transposed = transpose(original);
printf("Original Matrix:\n");
printSparseMatrix(original);
printf("\nTransposed Matrix:\n");
printSparseMatrix(transposed);
free(original.data);
free(original.indices);
free(transposed.data);
free(transposed.indices);
return 0;
}
阅读全文