#include<stdio.h>
typedef int ElemType;
#define weight 4
#define height 3
#define MAX 100 //最大非零数
typedef struct
{
int i,j;
ElemType e;
}Triple;
typedef struct
{
Triple data[MAX];
int mu,nu,tu;//高,宽,非零个数
}TSMatuix;
void show(TSMatuix T)
{
int i,j,m=0;
for(i=0;i<T.mu;i++)
{
for(j=0;j<T.nu;j++)
{
if(i==T.data[m].i&&j==T.data[m].j)
{
printf("%d",T.data[m].e);
m++;
}
else
{
printf("0");
}
}
printf("\n");
}
}
void zzh(TSMatuix &T)//转置后按行排序
{
int i,j,p;
Triple temp;
for(i=0;i<=T.tu;i++)
{
p=i;
for(j=i+1;j<=T.tu-1;j++)
{
if(T.data[j].i<T.data[p].i)
{
p=j;
}
if(p!=i)
{
temp=T.data[p];
T.data[p]=T.data[i];
T.data[i]=temp;
}
}
}
}
void zhuanzhi1(TSMatuix &T)//稀疏矩阵的转置
{
int i;
int m;
for(i=0;i<T.tu;i++)
{
m=T.data[i].i;
T.data[i].i=T.data[i].j;
T.data[i].j=m;
}
m=T.mu;
T.mu=T.nu;
T.nu=m;
}
void zhuanzhi2(TSMatuix &T,TSMatuix &S)//稀疏矩阵转置,存入到另外一块空间
{
S.mu=T.nu;
S.nu=T.mu;
S.tu=T.tu;
int i,m=0;
int j=0;
int temp;
for(i=0;i<T.mu;i++)
{
for(m=0;m<T.tu;m++)
{
if(T.data[m].j==i)
{
S.data[j]=T.data[m];
temp=S.data[j].i;
S.data[j].i=S.data[j].j;
S.data[j].j=temp;
j++;
}
}
}
}
void main()
{
int i,j;
TSMatuix T;
TSMatuix S;
int m=0;
int a[height][weight]={0,1,1,0,
1,0,0,0,
0,0,0,0 };
T.mu=height;
T.nu=weight;
T.tu=0;
for(i=0;i<height;i++) //转为稀疏矩阵存储
{
for(j=0;j<weight;j++)
{
if(a[i][j]!=0)
{
T.data[m].i=i;
T.data[m].j=j;
T.data[m].e=a[i][j];
m++;
T.tu++;
}
}
}
show(T);
printf("\n");
zhuanzhi1(T);
zzh(T);
show(T);
printf("\n");
zhuanzhi2(T,S);
show(S);
}
稀疏矩阵存储及转置
最新推荐文章于 2017-09-09 14:19:47 发布