代码实现(C语言实现随机产生一个以三元组顺序表存储的稀疏矩阵,并对其进行元素转置)
时间: 2024-05-14 16:19:35 浏览: 12
好的,下面是代码实现。
```c
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define MAXSIZE 100 // 稀疏矩阵最大元素个数
#define ROWS 5 // 矩阵行数
#define COLS 5 // 矩阵列数
typedef struct
{
int i; // 行下标
int j; // 列下标
int val; // 元素值
} Triple;
typedef struct
{
Triple data[MAXSIZE + 1]; // 存储三元组表,data[0]未用
int m, n, len; // 行数、列数、非零元素个数
} TSMatrix;
// 随机产生一个稀疏矩阵
void generateSparseMatrix(TSMatrix *M)
{
int i, j, k;
int randVal;
srand((unsigned int)time(NULL)); // 初始化随机数种子
M->m = ROWS;
M->n = COLS;
M->len = 0; // 先把长度清0
for (i = 1; i <= ROWS; i++)
{
for (j = 1; j <= COLS; j++)
{
randVal = rand() % 51; // 随机产生0~50的整数
if (randVal != 0)
{
k = ++M->len;
M->data[k].i = i;
M->data[k].j = j;
M->data[k].val = randVal;
}
}
}
}
// 输出稀疏矩阵
void printSparseMatrix(TSMatrix M)
{
int i;
printf("三元组表:\n");
for (i = 1; i <= M.len; i++)
{
printf("(%d, %d, %d)\n", M.data[i].i, M.data[i].j, M.data[i].val);
}
printf("\n");
}
// 对稀疏矩阵进行转置
TSMatrix transposeSparseMatrix(TSMatrix M)
{
int i, j, k;
TSMatrix T;
T.m = M.n;
T.n = M.m;
T.len = M.len;
if (T.len > 0)
{
k = 1;
for (j = 1; j <= M.n; j++)
{
for (i = 1; i <= M.len; i++)
{
if (M.data[i].j == j)
{
T.data[k].i = M.data[i].j;
T.data[k].j = M.data[i].i;
T.data[k].val = M.data[i].val;
k++;
}
}
}
}
return T;
}
int main()
{
TSMatrix M, T;
generateSparseMatrix(&M);
printf("原始矩阵:\n");
printSparseMatrix(M);
T = transposeSparseMatrix(M);
printf("转置后的矩阵:\n");
printSparseMatrix(T);
return 0;
}
```
代码中通过 `generateSparseMatrix` 函数随机生成一个稀疏矩阵,并通过 `printSparseMatrix` 函数输出其三元组表。`transposeSparseMatrix` 函数实现了对稀疏矩阵的转置,并返回转置后的矩阵。在 `main` 函数中,我们先生成一个稀疏矩阵,然后输出原始矩阵和转置后的矩阵。