#include "stdio.h"
#define maxsize 10
typedef int elemtype;
typedef struct
{
int i,j;
elemtype d;
}tupletype;
typedef struct
{
tupletype data[maxsize];
int md,nd,td;
}tabletype;
void trantup(tabletype sa,tabletype *sb);
void output(tabletype sa);
main( )
{
tabletype a={{{1,2,1},{1,4,2},{3,2,3},{8,2,4},{9,3,5},{9,4,6}},29,33,6};
tabletype b;
int k,m,n;
trantup(a,&b);
printf("转置前的矩阵\n");
for(k=0;k<a.td;k++)
printf("i=%d j=%d data=%d\n",a.data[k].i,a.data[k].j,a.data[k].d);
k=0;
output(a);
printf("\n转置后的矩阵\n");
for(k=0;k<a.td;k++)
printf("i=%d j=%d data=%d\n",b.data[k].i,b.data[k].j,b.data[k].d);
output(b);
}
void trantup(tabletype sa,tabletype *sb)
{ int p,q=0,v;
sb->md=sa.nd;
sb->nd=sa.md;
sb->td=sa.td;
if(sb->td!=0)
for(v=0;v<sa.nd;v++)
for(p=0;p<sa.td;p++)
if(sa.data[p].j==v)
{
sb->data[q].i=sa.data[p].j;
sb->data[q].j=sa.data[p].i;
sb->data[q].d=sa.data[p].d;
q++;
}
}
void output(tabletype sa)
{
int m,n,k=0;
for(m=0;m<sa.md;m++)
{
for(n=0;n<sa.nd;n++)
if(m==sa.data[k].i&&n==sa.data[k].j)
{
printf("%d ",sa.data[k].d);
k++;
}
else
printf("0 ");
printf("\n");
}
}