稀疏矩阵三元组转置源代码
时间: 2024-01-22 08:13:54 浏览: 81
稀疏矩阵转置 源码
4星 · 用户满意度95%
以下是三元组稀疏矩阵的转置算法的C语言源程序:
```c
#include <stdio.h>
#define MAXSIZE 12500
typedef struct {
int i, j;
int e;
} Triple;
typedef struct {
Triple data[MAXSIZE + 1];
int mu, nu, tu;
} TSMatrix;
int CreateSMatrix(TSMatrix *M) {
int i, j, k, t;
printf("请输入矩阵的行数、列数和非零元素个数:");
scanf("%d%d%d", &M->mu, &M->nu, &M->tu);
if (M->tu > MAXSIZE) {
printf("非零元素个数过多,程序终止运行!\n");
return 0;
}
printf("请按行序顺序输入三元组:\n");
for (t = 1; t <= M->tu; t++) {
printf("请输入第%d个三元组:", t);
scanf("%d%d%d", &M->data[t].i, &M->data[t].j, &M->data[t].e);
if (M->data[t].i < 1 || M->data[t].i > M->mu || M->data[t].j < 1 || M->data[t].j > M->nu) {
printf("输入的三元组不合法,程序终止运行!\n");
return 0;
}
}
for (i = 1; i <= M->tu - 1; i++) {
k = i;
for (j = i + 1; j <= M->tu; j++) {
if (M->data[j].i < M->data[k].i || (M->data[j].i == M->data[k].i && M->data[j].j < M->data[k].j)) {
k = j;
}
}
if (k != i) {
t = M->data[i].i;
M->data[i].i = M->data[k].i;
M->data[k].i = t;
t = M->data[i].j;
M->data[i].j = M->data[k].j;
M->data[k].j = t;
t = M->data[i].e;
M->data[i].e = M->data[k].e;
M->data[k].e = t;
}
}
return 1;
}
void PrintSMatrix(TSMatrix M) {
int i, j, k = 1;
for (i = 1; i <= M.mu; i++) {
for (j = 1; j <= M.nu; j++) {
if (M.data[k].i == i && M.data[k].j == j) {
printf("%d ", M.data[k].e);
k++;
} else {
printf("0 ");
}
}
printf("\n");
}
}
void TransposeSMatrix(TSMatrix M, TSMatrix *T) {
int i, j, k = 1, p, q, col;
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 (p = 1; p <= M.tu; p++) {
if (M.data[p].j == col) {
T->data[q].i = M.data[p].j;
T->data[q].j = M.data[p].i;
T->data[q].e = M.data[p].e;
q++;
}
}
}
}
}
int main() {
TSMatrix M, T;
if (CreateSMatrix(&M)) {
printf("原矩阵如下:\n");
PrintSMatrix(M);
TransposeSMatrix(M, &T);
printf("转置矩阵如下:\n");
PrintSMatrix(T);
}
return 0;
}
```
阅读全文