数据结构稀疏矩阵转置代码
时间: 2023-11-26 14:46:32 浏览: 104
以下是稀疏矩阵转置的代码实现:
```c
#include <stdio.h>
#include <stdlib.h>
#define SMAX 1000
typedef int datatype;
typedef struct {
int i, j; // 储存非零元素的行和列信息
datatype v; // 非零元素的值
} SPNode; // 数组里的元素
typedef struct {
int mu, nu, tu; // 矩阵的行、列和非零元素的个数
SPNode data[SMAX + 1]; // 三元组数组,第0位不用
} SPMatrix;
// 稀疏矩阵转置
void transposeSPMatrix(SPMatrix M, SPMatrix *T) {
int col, t, p;
T->mu = M.nu;
T->nu = M.mu;
T->tu = M.tu;
if (T->tu) {
t = 1;
for (col = 1; col <= M.nu; col++) {
for (p = 1; p <= M.tu; p++) {
if (M.data[p].j == col) {
T->data[t].i = M.data[p].j;
T->data[t].j = M.data[p].i;
T->data[t].v = M.data[p].v;
t++;
}
}
}
}
}
int main() {
SPMatrix M = {3, 4, 5, {{1, 2, 3}, {1, 3, 4}, {2, 1, 5}, {3, 1, 6}, {3, 4, 8}}};
SPMatrix T;
transposeSPMatrix(M, &T);
printf("原矩阵:\n");
for (int i = 1; i <= M.tu; i++) {
printf("%d %d %d\n", M.data[i].i, M.data[i].j, M.data[i].v);
}
printf("转置矩阵:\n");
for (int i = 1; i <= T.tu; i++) {
printf("%d %d %d\n", T.data[i].i, T.data[i].j, T.data[i].v);
}
return 0;
}
```
阅读全文