C语言输出6*5稀疏矩阵
时间: 2024-12-18 19:18:48 浏览: 8
在C语言中,如果要输出一个稀疏矩阵(即包含大量零元素的矩阵),通常不会像常规二维数组那样存储所有元素,而是采用压缩的形式,如使用两个一维数组分别存放行索引、列索引和对应的值。这里假设我们使用结构体来表示矩阵的一个非零元素。
首先,创建一个结构体`sparse_matrix_entry`:
```c
typedef struct {
int row; // 行索引
int col; // 列索引
int value; // 对应的值
} sparse_matrix_entry;
```
然后可以定义一个`sparse_matrix`类型的指针,用于存储这些信息:
```c
typedef sparse_matrix_entry** sparse_matrix;
```
接下来,我们可以定义一个稀疏矩阵,并填充数据(这里仅示例6*5矩阵的一部分,实际可以根据需要添加更多元素):
```c
#define SIZE 6
#define非零元素个数 10
sparse_matrix matrix = (sparse_matrix)malloc(sizeof(sparse_matrix_entry*) * SIZE);
for (int i = 0; i < non_zero_elements; ++i) {
sparse_matrix_entry* entry = malloc(sizeof(sparse_matrix_entry));
entry->row = i % SIZE; // 简化假设行索引均匀分布
entry->col = i / SIZE; // 同样,简化列索引
entry->value = 6 * (i % 2); // 随机赋值或按某种规则
matrix[entry->row] = entry; // 将新元素插入对应行的指针链表
}
// 输出稀疏矩阵
for (int i = 0; i < SIZE; ++i) {
if (matrix[i]) { // 检查该行是否有非零元素
printf("Row %d: ", i + 1);
for (sparse_matrix_entry* entry = matrix[i]; entry != NULL; entry = entry->next) {
printf("(%d,%d): %d ", entry->row + 1, entry->col + 1, entry->value);
}
printf("\n");
}
}
```
别忘了在结束程序前释放内存:
```c
for (int i = 0; i < SIZE; ++i) {
if (matrix[i]) {
free(matrix[i]);
}
}
free(matrix);
```
阅读全文