广义表的应用--稀疏矩阵的快速转置(三元组)
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();
}
#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();
}
相关文章推荐
- 稀疏矩阵的压缩存储与快速转置 三元组法 类与对象实现
- 三元组表压缩存储稀疏矩阵实现稀疏矩阵的快速转置(Java语言描述)
- 三元组表压缩存储稀疏矩阵实现稀疏矩阵的快速转置(Java语言描述)
- 数组与广义表_稀疏矩阵的压缩存储_三元组做存储结构_矩阵转置
- 三元组稀疏矩阵的快速转置
- 三元组稀疏矩阵的快速转置
- 数据结构--数组和广义表--以三元组顺序表存储方式的矩阵的一般转置和快速转置
- 第九周 数据结构实践项目——数组和广义表【项目3.1-稀疏矩阵的三元组表示的实现及应用】
- 第九周 项目3-稀疏矩阵的三元组表示的实现及应用 (1)
- 【第九周项目3-稀疏矩阵的三元组表示的实现及应用(2)】
- 第9周项目3-稀疏矩阵的三元组表示的实现及应用(2)
- 第九周项目三 稀疏矩阵的三元组表示的实现及应用(2)
- 八(1)4 三元组稀疏矩阵表示的实现及应用
- C/C++ 第八周串和数组 (一)稀疏矩阵的三元组表示的实现及应用 项目4—(2)
- 第九周项目3-稀疏矩阵三元组表示的实现及应用(1)
- 第9周项目3-稀疏矩阵的三元组表示的实现及应用(2)
- 第九周 项目3-稀疏矩阵的三元组表示的实现及应用
- 第9周项目3-稀疏矩阵的三元组表示的实现及应用(2)
- 第八周项目4 稀疏矩阵的三元组表示的实现及应用
- 第九周项目3——稀疏矩阵三元组表示的实现与应用(1)