此程序适用于多对多的场景:多个元素需要映射到一个动态调整的数组
/多对多映射数组:实验程序的目的为输入一个数字,都可以找到调整后的数字
(找到了就往前移动一位),如输入1,输出的永远是原来的结构体存储的第2位(0为第一位)/
#include<stdio.h>
void swap(int &m,int &n){
int t=m;
m=n;
n=t;
}
#define size 10
int main(){
int b[size],j;//b数组用来映射c数组的位置,c数组用来存东西;
struct data{
int x;
int y;
};
struct data c[size];
for(int i=0;i<size;i++){
b[i]=c[i].x=i;
c[i].y=i+100;
}
for(int g=0; g<size; g++){
printf("%d ",c[g].y);
if(g==size-1){
printf("\n");
}
}
/*调整方法为查找成功把它移动到前一个位置*/
while(1){
scanf("%d",&j);
if(j==520){
break;
}
int k=j%size;
int m=b[k];
printf("%d,%d\n",m,c[m].y);
if(m==0){ //这是第一个元素不需要调整;
for(int g=0;g<size;g++){
printf("%d ",c[g].y);
if(g==size-1){
printf("\n");
}
}
continue;
}
int d=0,v=0;
//这里不是第一个元素需要调整
for(int i=0;i<size;i++){//查找b数组中,存储下标为m和m-1的项进行交换;
if(c[b[i]].y==c[m].y){
d=i;
}
}
for(int w=0;w<size;w++){
if(c[b[w]].y==c[m-1].y){
v=w;
}
}
swap(b[d],b[v]);
struct data change;
change=c[m];
c[m]=c[m-1];
c[m-1]=change;
//swap(c[m],c[m-1]);
for(int g=0;g<size;g++){
printf("%d ",c[g].y);
if(g==size-1){
printf("\n");
}
}
}
return 0;
}
如下图所示: