i,j ,a
i+1,j
>|1≤i≤m-1,1≤j≤n }
基本操作:
CreateSMtrix(& M)
操作结果:创建稀疏矩阵M。
DestroySMaix(&M)
初始条件:稀疏矩阵M已存在。
操作结果:销毁稀疏矩阵M。
PrintSMatrix(L)
初始条件:稀疏矩阵M已经存在。
操作结果:输出稀疏矩阵M。
CopySMatrix(M,&T)
初始条件:稀疏矩阵M已经存在。
操作结果:由稀疏矩阵M复制得到T。
TransposeSMatrix(M,&T)
初始条件:稀疏矩阵M已经存在。
操作结果:求稀疏矩阵M的转转矩阵T。
}ADT SparseMatrix
2. 本程序有三个模块:
⑴主程序模块
main(){
初始化;
{
接受命令;
显示结果;
}
}
⑵矩阵压缩存储单元模块:实现链表抽象数据类型操作,即函数的定义模块;
三、详细设计
⒈元素类型,结点类型
typedef struct {
int i,j;
int e;
}Triple;
typedef struct{
Triple data[MAXSIZE+1];
int mu,nu,tu;
} Tsmatrix;
2.对抽象数据类型中的部分基本操作的伪码算法如下:
Tsmatrix * creatarray(Tsmatrix *M)
{ int m,n,p=1;
int c;
printf("please input the array A:\n");
for(m=1;m<=a;m++)
for(n=1;n<=b;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=a; M->nu=b;
printf("yuan lai san yuan zu de biao shi wei :\n\n");
for(m=1;m<=M->tu;m++)
printf("%3d%3d%3d\t",M->data[m].i,M->data[m].j,M->data[m].e);
printf("\n");
return M;
}
/*三元组快速转置*/
Tsmatrix * fasttrans(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!=0)
{
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("\n\nzhuan zhi hou de san yuan zu biao shi wei :\n\n");
for(m=1;m<=T->tu;m++)
printf("%3d%3d%3d\t",T->data[m].i,T->data[m].j,T->data[m].e);
printf("\n");
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);
}
}
}
}3.主函数和其他函数的伪码算法
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",&a,&b); /*输入行列数*/
M=creatarray(M); /*创建稀疏矩阵*/
printf("you had creat the array:\n");
print(M,a,b); /*输出创建好的三元组*/
T=fasttrans(M,T); /*将三元组转置*/
printf("the trans array is:\n");