C 语言实现一个用三元组表表示一个稀疏阵,对该矩阵进行转置的程序的代码
时间: 2023-06-05 15:06:40 浏览: 176
Okay,简单的三元组表稀疏矩阵转置的C语言实现代码如下:
```c
#include <stdio.h>
#include <stdlib.h>
#define MaxSize 100
typedef struct {
int row, col; //行号、列号
int data; //元素值
}Triple;
typedef struct {
Triple data[MaxSize+1]; //存放三元组表。从data[1]开始存放
int rows, cols, nums; //稀疏矩阵的行数、列数、非零元素个数
}TSMatrix;
void TransMatrix(TSMatrix *A, TSMatrix *B) {
int p, q, col, k = 1;
int num[MAXSIZE+1], pos[MAXSIZE+1];
B->rows = A->cols;
B->cols = A->rows;
B->nums = A->nums;
if(B->nums) {
for(col = 1; col <= A->cols; col++)
num[col] = 0;
for(p = 1; p <= A->nums; p++)
num[A->data[p].col]++;
pos[1] = 1;
for(col = 2; col <= A->cols; col++)
pos[col] = pos[col-1] + num[col-1];
for(p = 1; p <= A->nums; p++) {
col = A->data[p].col;
q = pos[col]++;
B->data[q].row = A->data[p].col;
B->data[q].col = A->data[p].row;
B->data[q].data = A->data[p].data;
}
}
return;
}
int main() {
TSMatrix A = {
{{0,0,0}, {1,1,5}, {1,5,-9}, {2,2,11}, {3,1,6}, {3,6,10}},
3, 6, 5
};
TSMatrix B;
TransMatrix(&A, &B);
printf("矩阵A:\n");
for(int i = 1; i <= A.nums; i++)
printf("%d %d %d\n", A.data[i].row, A.data[i].col, A.data[i].data);
printf("矩阵B:\n");
for(int i = 1; i <= B.nums; i++)
printf("%d %d %d\n", B.data[i].row, B.data[i].col, B.data[i].data);
return 0;
}
```
简单的介绍一下,TSMatrix为三元组表稀疏矩阵结构,其中data数组存放非零元素,nums表示非零元素个数,TransMatrix函数为实现矩阵转置的函数。首先初始化B的行列数和非零元素总数,然后依次按列向amount大小排序,统计每一列的非零元素个数num[col],完成后确定每列第一个非零元素在转置后的B中的位置,存放在pos[col]中。然后依次遍历A.data数组,将对应的元素填充到B.data数组的正确位置上,最后返回转置后的B矩阵即可。
阅读全文