#include <stdio.h>
#define MAXSIZE 1000
typedef struct
{
int i, j;
int e;
} Triple;
typedef struct
{
Triple data[MAXSIZE + 1]; //非零元三元组列表,data[0]未用
int mu, nu, tu; //矩阵的行数,列数,非零元个数
} TSMatrix;
int main()
{
TSMatrix M, T;
int m;
void PrintMatrix(TSMatrix * M);
int TransposeSMatrix(TSMatrix * M, TSMatrix * T);
printf("请输入矩阵的行数,列数,非零元个数:\n");
scanf("%d%d%d", &M.mu, &M.nu, &M.tu);
for (m = 1; m <= M.tu; m++)
{
printf("请输入三元组成员%d:\n", m);
scanf("%d%d%d", &M.data[m].i, &M.data[m].j, &M.data[m].e);
}
printf("\n输出转置前的矩阵:\n");
PrintMatrix(&M);
TransposeSMatrix(&M, &T); //将M矩阵转置
printf("\n输出转置后的矩阵:\n");
PrintMatrix(&T);
return 0;
}
void PrintMatrix(TSMatrix *M)
{
int i, j, k, flag;
for (i = 1; i <= M->mu; i++)
{
for (j = 1; j <= M->nu; j++)
{
flag = 0;
for (k = 1; k <= M->tu; k++)
if (M->data[k].i == i && M->data[k].j == j)
{
printf("%3d", M->data[k].e);
flag = 1;
}
if (flag == 0)
printf("%3d", 0);
}
printf("\n");
}
}
int TransposeSMatrix(TSMatrix *M, TSMatrix *T)
{
int col, p, q;
T->mu = M->nu;
T->nu = M->mu;
T->tu = M->tu;
if (T->tu)
{
q = 1;
for (col = 1; col <= M->nu; col++) //处理转置矩阵的行
for (p = 1; p <= M->tu; p++)
if (M->data[p].j == col)
{
T->data[q].i = M->data[q].j;
T->data[q].j = M->data[q].i;
T->data[q].e = M->data[q].e;
q++;
}
}
return 0;
}
03-11
1万+