多对多映射调整原理

此程序适用于多对多的场景:多个元素需要映射到一个动态调整的数组
在这里插入图片描述

/多对多映射数组:实验程序的目的为输入一个数字,都可以找到调整后的数字
(找到了就往前移动一位),如输入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;

}

如下图所示:
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值