稀疏矩阵的三元组存储及快速转置的c语言代码
时间: 2023-06-08 11:08:35 浏览: 62
以下是稀疏矩阵的三元组存储及快速转置的C语言代码:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 100
typedef struct{
int i;
int j;
int e;
}Triple;
typedef struct{
Triple data[MAXSIZE + 1];
int mu, nu, tu;
}TSMatrix;
int TransposeSMatrix(TSMatrix M, TSMatrix *T){
int col, t, q;
T->mu = M.nu;
T->nu = M.mu;
T->tu = M.tu;
if (T->tu){
q = 1;
for (col = 1; col <= M.nu; col++){
for (t = 1; t <= M.tu; t++)
if (M.data[t].j == col){
T->data[q].i = M.data[t].j;
T->data[q].j = M.data[t].i;
T->data[q].e = M.data[t].e;
q++;
}
}
}
return 1;
}
int main(){
TSMatrix M, T;
int i, j, k;
printf("请输入矩阵的行数,列数,非零元素个数并输入三元组:\n");
scanf("%d %d %d", &M.mu, &M.nu, &M.tu);
for (i = 1; i <= M.tu; i++)
scanf("%d %d %d", &M.data[i].i, &M.data[i].j, &M.data[i].e);
printf("原始矩阵:\n");
for (i = 1; i <= M.mu; i++){
for (j = 1; j <= M.nu; j++){
k = 1;
while (k <= M.tu && M.data[k].i <= i){
if (M.data[k].i == i && M.data[k].j == j){
printf("%d ", M.data[k].e);
break;
}
k++;
}
if (k > M.tu)
printf("0 ");
}
printf("\n");
}
TransposeSMatrix(M, &T);
printf("转置矩阵:\n");
for (i = 1; i <= T.mu; i++){
for (j = 1; j <= T.nu; j++){
k = 1;
while (k <= T.tu && T.data[k].i <= i){
if (T.data[k].i == i && T.data[k].j == j){
printf("%d ", T.data[k].e);
break;
}
k++;
}
if (k > T.tu)
printf("0 ");
}
printf("\n");
}
return 0;
}
```
这是一个简单的实现,对于更大规模的稀疏矩阵,我们可以使用更高效的算法来进行转置操作。