用C语言写一个稀疏矩阵的三元组存储及快速转置
时间: 2023-12-29 07:19:43 浏览: 99
数据结构C语言版-稀疏矩阵的三元组顺序表存储表示和实现.doc
好的,以下是用C语言实现稀疏矩阵的三元组存储及快速转置的代码:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX_SIZE 100
typedef struct {
int row;
int col;
int value;
} Triple; // 三元组
typedef struct {
Triple data[MAX_SIZE + 1]; // 存放三元组的数组
int row_num; // 矩阵的行数
int col_num; // 矩阵的列数
int elem_num; // 非零元素的数量
} Matrix; // 稀疏矩阵
void transpose(Matrix *m, Matrix *t) {
t->row_num = m->col_num;
t->col_num = m->row_num;
t->elem_num = m->elem_num;
if (t->elem_num > 0) {
int q = 1; // 存放转置后的元素的下标
for (int col = 1; col <= m->col_num; col++) {
for (int p = 1; p <= m->elem_num; p++) {
if (m->data[p].col == col) {
t->data[q].row = m->data[p].col;
t->data[q].col = m->data[p].row;
t->data[q].value = m->data[p].value;
q++;
}
}
}
}
}
int main() {
Matrix m = {
.data = {
{1, 1, 2},
{1, 2, 0},
{1, 5, 1},
{2, 2, 3},
{3, 3, 4},
{4, 3, 8},
{5, 1, -1},
{5, 5, 1}
},
.row_num = 5,
.col_num = 5,
.elem_num = 8
}; // 例如,一个 5x5 的稀疏矩阵
Matrix t = {
.row_num = 0,
.col_num = 0,
.elem_num = 0
}; // 空的稀疏矩阵
printf("Original Matrix:\n");
for (int i = 1; i <= m.elem_num; i++) {
printf("(%d, %d, %d)\n", m.data[i].row, m.data[i].col, m.data[i].value);
}
transpose(&m, &t);
printf("Transposed Matrix:\n");
for (int i = 1; i <= t.elem_num; i++) {
printf("(%d, %d, %d)\n", t.data[i].row, t.data[i].col, t.data[i].value);
}
return 0;
}
```
此代码实现了稀疏矩阵的三元组存储以及矩阵转置。在转置时,需要注意转置后的矩阵的行数、列数和非零元素数都要与原始矩阵相反,非零元素的值也要保持不变。
阅读全文