用三元组表写一个转置矩阵C语言
时间: 2023-11-22 13:58:31 浏览: 197
假设原始矩阵为A,转置矩阵为B,矩阵大小为n行m列,可以用三元组表表示原始矩阵A和转置矩阵B。
```c
#include <stdio.h>
#define MAX_SIZE 100
typedef struct {
int row; // 行号
int col; // 列号
int value; // 元素值
} Triple;
// 转置矩阵
void transpose(Triple A[], int row, int col, Triple B[]) {
int num[MAX_SIZE]; // 存储每一列的非零元素个数
int cpot[MAX_SIZE]; // 存储每一列的第一个非零元素在B中的位置
int i, j, p;
// 统计每一列的非零元素个数
for (i = 0; i < col; i++) {
num[i] = 0;
}
for (p = 1; p <= row * col; p++) {
num[A[p].col - 1]++;
}
// 计算每一列的第一个非零元素在B中的位置
cpot[0] = 1;
for (i = 1; i < col; i++) {
cpot[i] = cpot[i - 1] + num[i - 1];
}
// 转置
for (p = 1; p <= row * col; p++) {
i = A[p].col - 1;
j = cpot[i] - 1;
B[j].row = A[p].col;
B[j].col = A[p].row;
B[j].value = A[p].value;
cpot[i]++;
}
}
int main() {
int row, col, i, j, count = 0;
Triple A[MAX_SIZE], B[MAX_SIZE];
printf("请输入矩阵的行数和列数:");
scanf("%d %d", &row, &col);
printf("请输入矩阵元素:\n");
for (i = 0; i < row; i++) {
for (j = 0; j < col; j++) {
int value;
scanf("%d", &value);
if (value != 0) {
count++;
A[count].row = i + 1;
A[count].col = j + 1;
A[count].value = value;
}
}
}
printf("原始矩阵为:\n");
for (i = 0; i < row; i++) {
for (j = 0; j < col; j++) {
int k;
for (k = 1; k <= count; k++) {
if (A[k].row == i + 1 && A[k].col == j + 1) {
printf("%d ", A[k].value);
break;
}
}
if (k > count) {
printf("0 ");
}
}
printf("\n");
}
transpose(A, row, col, B);
printf("转置矩阵为:\n");
for (i = 0; i < col; i++) {
for (j = 0; j < row; j++) {
int k;
for (k = 0; k < count; k++) {
if (B[k].row == i + 1 && B[k].col == j + 1) {
printf("%d ", B[k].value);
break;
}
}
if (k >= count) {
printf("0 ");
}
}
printf("\n");
}
return 0;
}
```
阅读全文
相关推荐














