c语言构建矩阵的三元组顺序表压缩存储结构;实现三元组压缩存储结构的矩阵的创建、矩阵的输出、矩阵的简单转置和快速转置算法、以及两个矩阵的相加。
时间: 2024-05-06 13:02:49 浏览: 15
好的,以下是实现三元组压缩存储结构的矩阵的相关操作代码:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX_SIZE 100
typedef struct {
int i, j;
int data;
} Triple;
typedef struct {
Triple data[MAX_SIZE + 1];
int mu, nu, tu;
} TSMatrix;
void CreateMatrix(TSMatrix *M) {
int m, n, t;
int i;
printf("请输入矩阵的行数、列数和非零元素个数:\n");
scanf("%d %d %d", &m, &n, &t);
if (m > MAX_SIZE || n > MAX_SIZE || t > MAX_SIZE) {
printf("矩阵的行数、列数或非零元素个数超过了最大值!\n");
exit(-1);
}
M->mu = m;
M->nu = n;
M->tu = t;
printf("请输入矩阵的三元组:\n");
for (i = 1; i <= t; i++) {
scanf("%d %d %d", &(M->data[i].i), &(M->data[i].j), &(M->data[i].data));
}
}
void PrintMatrix(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].data);
k++;
} else {
printf("0 ");
}
}
printf("\n");
}
}
void SimpleTranspose(TSMatrix M, TSMatrix *T) {
int i, j, k;
T->mu = M.nu;
T->nu = M.mu;
T->tu = M.tu;
k = 1;
for (j = 1; j <= M.nu; j++) {
for (i = 1; i <= M.tu; 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].data = M.data[i].data;
k++;
}
}
}
}
void FastTranspose(TSMatrix M, TSMatrix *T) {
int i, j, k;
int num[M.nu + 1], cpot[M.nu + 1];
T->mu = M.nu;
T->nu = M.mu;
T->tu = M.tu;
if (M.tu) {
for (i = 1; i <= M.nu; i++) {
num[i] = 0;
}
for (k = 1; k <= M.tu; k++) {
num[M.data[k].j]++;
}
cpot[1] = 1;
for (j = 2; j <= M.nu; j++) {
cpot[j] = cpot[j - 1] + num[j - 1];
}
for (k = 1; k <= M.tu; k++) {
j = M.data[k].j;
i = cpot[j];
T->data[i].i = M.data[k].j;
T->data[i].j = M.data[k].i;
T->data[i].data = M.data[k].data;
cpot[j]++;
}
}
}
void AddMatrix(TSMatrix M, TSMatrix N, TSMatrix *Q) {
int i, j, k;
if (M.mu != N.mu || M.nu != N.nu) {
printf("两个矩阵的行数或列数不相等!\n");
exit(-1);
}
Q->mu = M.mu;
Q->nu = M.nu;
k = 1;
for (i = 1; i <= M.tu; i++) {
Q->data[k].i = M.data[i].i;
Q->data[k].j = M.data[i].j;
Q->data[k].data = M.data[i].data + N.data[i].data;
k++;
}
}
int main() {
TSMatrix A, B, C, D, E;
CreateMatrix(&A);
CreateMatrix(&B);
printf("矩阵A:\n");
PrintMatrix(A);
printf("矩阵B:\n");
PrintMatrix(B);
SimpleTranspose(A, &C);
printf("矩阵A的简单转置:\n");
PrintMatrix(C);
FastTranspose(A, &D);
printf("矩阵A的快速转置:\n");
PrintMatrix(D);
AddMatrix(A, B, &E);
printf("矩阵A + B:\n");
PrintMatrix(E);
return 0;
}
```
以上代码中,`CreateMatrix` 函数用于创建矩阵,`PrintMatrix` 函数用于输出矩阵,`SimpleTranspose` 函数和 `FastTranspose` 函数分别实现了矩阵的简单转置和快速转置算法,`AddMatrix` 函数用于实现两个矩阵的相加。在 `main` 函数中,我们创建了两个矩阵 A 和 B,并分别输出了它们;然后分别对矩阵 A 进行了简单转置和快速转置,并输出了结果;最后,我们对矩阵 A 和 B 进行了相加,并输出了结果。