1.用C语言编程实现稀疏矩阵的转置,将源程序以实验5-1为文件名保存在自己的文件夹里面。 ①采用三元组顺序表创建一个稀疏矩阵; ②将矩阵的行列值相互交换; ③将每个三元组中的i和j相互调换; ④重排三元组之间的次序实现矩阵转置。
时间: 2024-02-24 09:53:14 浏览: 78
以下是实现稀疏矩阵转置的C语言代码,采用三元组顺序表创建稀疏矩阵:
```
#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 100 // 稀疏矩阵的最大非零元素个数
typedef struct {
int i, j; // 三元组的行列下标
int value; // 三元组的值
} Triple;
typedef struct {
Triple data[MAXSIZE + 1]; // 非零元素三元组数组,data[0]存储矩阵的行数、列数和非零元素个数
int rows, cols, nums; // 稀疏矩阵的行数、列数和非零元素个数
} TSMatrix;
// 创建稀疏矩阵
void CreateMatrix(TSMatrix *matrix) {
int i, j, k;
printf("请输入稀疏矩阵的行数、列数和非零元素个数:\n");
scanf("%d %d %d", &matrix->rows, &matrix->cols, &matrix->nums);
matrix->data[0].i = matrix->rows;
matrix->data[0].j = matrix->cols;
matrix->data[0].value = matrix->nums;
printf("请输入每个非零元素的行列下标和值:\n");
for (k = 1; k <= matrix->nums; k++) {
scanf("%d %d %d", &matrix->data[k].i, &matrix->data[k].j, &matrix->data[k].value);
}
}
// 打印稀疏矩阵
void PrintMatrix(TSMatrix matrix) {
int i, j, k = 1;
printf("稀疏矩阵的三元组表表示如下:\n");
for (i = 1; i <= matrix.rows; i++) {
for (j = 1; j <= matrix.cols; j++) {
if (k <= matrix.nums && matrix.data[k].i == i && matrix.data[k].j == j) {
printf("%d ", matrix.data[k].value);
k++;
} else {
printf("0 ");
}
}
printf("\n");
}
}
// 稀疏矩阵转置
void TransposeMatrix(TSMatrix *matrix) {
int i, j, k;
// 交换行列值
int temp = matrix->rows;
matrix->rows = matrix->cols;
matrix->cols = temp;
// 交换每个三元组中的i和j
for (k = 1; k <= matrix->nums; k++) {
temp = matrix->data[k].i;
matrix->data[k].i = matrix->data[k].j;
matrix->data[k].j = temp;
}
// 重排三元组之间的次序
for (i = 1; i <= matrix->nums; i++) {
for (j = i + 1; j <= matrix->nums; j++) {
if (matrix->data[i].i > matrix->data[j].i || (matrix->data[i].i == matrix->data[j].i && matrix->data[i].j > matrix->data[j].j)) {
Triple temp = matrix->data[i];
matrix->data[i] = matrix->data[j];
matrix->data[j] = temp;
}
}
}
}
int main() {
TSMatrix matrix;
CreateMatrix(&matrix);
printf("原稀疏矩阵如下:\n");
PrintMatrix(matrix);
TransposeMatrix(&matrix);
printf("转置后的稀疏矩阵如下:\n");
PrintMatrix(matrix);
return 0;
}
```
注意:在运行程序时需要按照提示输入稀疏矩阵的行数、列数和非零元素个数,以及每个非零元素的行列下标和值。
阅读全文