列序递增转置和一次定位快速转置

该程序主要练习列序递增转置和一次定位快速转置
莫在意别的细节嘿嘿

#include <stdio.h>
typedef struct node
{ int zhi,hang,lie;
 }node;
 typedef struct node1
 {node a[20];
 int hang,lie ,shu;
 }node1;
node1 zhuanzhiyi(node1 s)
{node1 p;
int num[5],dizhi[5],i,lie,l;
p.hang=s.lie;
p.lie=s.hang;
p.shu=s.shu;
dizhi[1]=1;
if(p.shu)
{for(i=1;i<=s.lie;i++)
num[i]=0;
for(i=1;i<=s.shu;i++)
num[s.a[i].lie]++;
for(i=2;i<=s.lie;i++)
dizhi[i]=dizhi[i-1]+num[i-1];
for(i=1;i<=s.shu;i++)
{lie=s.a[i].lie;
l=dizhi[lie];
p.a[l].hang=s.a[i].lie;
p.a[l].lie=s.a[i].hang;
p.a[l].zhi=s.a[i].zhi;
dizhi[lie]++;}
}
return  p;
 } //一次定位快速转置法
node1 zhuanzhier(node1 s)
{node1 p;
int i,j,k=1;
p.hang=s.lie;
p.lie=s.hang;
p.shu=s.shu;
if(p.shu)
{for(i=1;i<=s.lie;i++)
{for(j=1;j<=s.shu;j++)
{if(s.a[j].lie==i)
{p.a[k].hang=s.a[j].lie;
p.a[k].lie=s.a[j].hang;
p.a[k].zhi=s.a[j].zhi;
k++;
}
}
}
}
return p;
}//列序递增转置法 
 int main()
{ node1 s,p;
int i;
s.a[1].hang=1;
s.a[1].lie=3;
s.a[1].zhi=1;
s.a[2].hang=2;
s.a[2].lie=1;
s.a[2].zhi=2;
s.a[3].hang=3;
s.a[3].lie=4;
s.a[3].zhi=3;
s.a[4].hang=4;
s.a[4].lie=3;
s.a[4].zhi=4;
s.shu=4;
s.hang=4;
s.lie=4;//只是简单给矩阵中非零数字赋值储存
for(i=1;i<=s.shu;i++)
printf("%d ",s.a[i].zhi); printf("\n"); 
s=zhuanzhiyi(s);
s=zhuanzhier(s);
for(i=1;i<=s.shu;i++)
printf("%d ",s.a[i].zhi); 
}
在这里插入代码片

猜你喜欢

转载自blog.csdn.net/feiqipengcheng/article/details/83418775
今日推荐