1. 程式人生 > >列序遞增轉置和一次定位快速轉置

列序遞增轉置和一次定位快速轉置

該程式主要練習列序遞增轉置和一次定位快速轉置
莫在意別的細節嘿嘿

#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); 
}
在這裡插入程式碼片