列序遞增轉置和一次定位快速轉置
阿新 • • 發佈:2018-11-29
該程式主要練習列序遞增轉置和一次定位快速轉置
莫在意別的細節嘿嘿
#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); } 在這裡插入程式碼片