您的位置:首页 > 其它

广义表的应用--稀疏矩阵的快速转置(三元组)

2012-05-11 21:51 369 查看
#include<stdio.h>

#define MAXSIZE 10000

typedef struct{

int i,j;

int e;

}Triple;

typedef struct{

Triple data[MAXSIZE+1];

int mu,nu,tu;

}TSMatrix;

int row,col;

TSMatrix *CreateSMatrix(TSMatrix *M)

{

int m,n,p=1;

int c;

printf("please input array A:\n ");

for(m=1;m<=row;m++)

for(n=1;n<=col;n++)

{

scanf("%d",&c);

if(c!=0)

{

M->data[p].e=c;

M->data[p].i=m;

M->data[p].j=n;

p++;

}

}

M->tu=p;M->mu=row;M->nu=col;

printf("the old TSMatrix is:\n\n");

for(m=1;m<=M->tu;m++)

printf("%3d %3d %3d\n",M->data[m].i,M->data[m].j,M->data[m].e);

printf("\n");

return M;

}

TSMatrix *FastTransTSMatrix(TSMatrix *M,TSMatrix *T)

{

int p,col,q,t,m;

int num[100];

int cpot[100];

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].j];

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].j;q=cpot[col];

T->data[q].i=M->data[p].j;

T->data[q].j=M->data[p].i;

T->data[q].e=M->data[p].e;

++cpot[col];

}

}

printf("\nThe new TSMatrix is:\n");

for(m=1;m<=T->tu;m++)

printf("%3d%3d%3d\n",T->data[m].i,T->data[m].j,T->data[m].e);

return T;

}

void print(TSMatrix *T,int x,int y)

{

int m,n,p=1;

int d;

for(m=1;m<=x;m++)

{

printf("\n");

for(n=1;n<=y;n++)

{

if(T->data[p].i==m&&T->data[p].j==n)

{

d=T->data[p].e;

p++;

}

else d=0;

printf("%6d",d);

}

}

}

void main()

{

TSMatrix *M,*T;

M=(TSMatrix *)malloc(sizeof(TSMatrix));

T=(TSMatrix *)malloc(sizeof(TSMatrix));

printf("please input array's row and col:\n");

scanf("%d %d",&row,&col);

M=CreateSMatrix(M);

printf("The Creative array is:\n");

print(M,row,col);

T=FastTransTSMatrix(M,T);

printf("The trans's array is:\n");

print(T,row,col);

getch();

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐