问题:输入一个三元组表,先输出其矩阵形态,然后对其进行转置并输出转置后的矩阵。
程序代码
#include <stdio.h>
- #define MAXSIZE 50
typedef struct //定义三元组
{
int m,n;
int e;
}Triple;
typedef struct
{
Triple data[MAXSIZE];
int mu,nu,tu;
}TSMatrix;
void FastTranspose(TSMatrix M,TSMatrix*T);
void output(TSMatrix *M);
int main()
{
TSMatrix A,T;int k;
;
printf("Please input the matrix rows and columns:"); //输入要输出的矩阵行和列
scanf("%d%d",&A.mu,&A.nu);
printf("The number of non-zeroelements:");scanf("%d",&A.tu); //输入非零元素个数
printf("input thetriple:\n"); //顺序输入三元组
for(k=1;k<=A.tu;k++)
{
scanf("%d %d%d",&A.data[k].m,&A.data[k].n,&A.data[k].e);
}
printf("The original matrixis:\n");
output(&A); //输出原矩阵
FastTranspose(A,&T); //转置运算
printf("The transpose of the matrix is:\n");
output(&T); //输出转置后的矩阵
return 0;
}
void FastTranspose(TSMatrixM,TSMatrix *T) //对三元组进行转置
{
int col,p,q,t;
int num[MAXSIZE],cpot[MAXSIZE];
T->mu=M.nu;T->nu=M.mu;T->tu=M.tu;
if(T->tu)
{
for(col=1;col<=M.nu;++col)
num[col]=0;
for(t=1;t<=M.tu;++t)
++num[M.data[t].n];
cpot[1]=1;
for(col=2;col<=M.nu;++col)
cpot[col]=cpot[col-1]+num[col-1];
for(p=1;p<=M.tu;++p)
{
col=M.data[p].n;
q=cpot[col];
T->data[q].m=M.data[p].n;
T->data[q].n=M.data[p].m;
T->data[q].e=M.data[p].e;
++cpot[col];
}
}
}
void output(TSMatrix *M) //输出三元组
{
int i,j;
int t=1;
for(i=1;i<=M->mu;i++)
{
for(j=1;j<=M->nu;j++)
{
if(M->data[t].m==i&&M->data[t].n==j)
{
printf("%d ",M->data[t].e);
t++;
}
else printf("0 ");
}
printf("\n");
}
}
运行结果