数据结构算法(2):将线性表(a1,a2,a3,……,am)和(b1,b2,b3,……,bn)位置互换,得到(b1,b2,b3,……,bn,a1,a2,a3,……,am)

题目

将线性表(a1,a2,a3,……,am)和(b1,b2,b3,……,bn)位置互换,得到(b1,b2,b3,……,bn,a1,a2,a3,……,am)

算法思路

①数组分成两段,前一段(a1,a2,a3,……,am),后一段(b1,b2,b3,……,bn);
②(a1,a2,a3,……,am)逆置为(am,……,a3,a2,a1);
③(b1,b2,b3,……,bn)逆置为(bn,……,b3,b2,b1);
④合并(am,……,a3,a2,a1 , bn,……,b3,b2,b1);
⑤整体逆置((b1,b2,b3,……,bn,a1,a2,a3,……,am);

代码展示

bool Reverse(int A[] ,int m, int n  ,int size){//m起始元素,n末尾元素,size数组大小
	if(m>=n||n>=size)
		return false;
	int mid = (m+n)/2; //找到中间位置,进行逆置
	for(int i = m; i<= mid, i++){ //i从m开始,到中间位置
		int temp =a[i];  //交换
		a[i]=a[n-i];   //不能a[i]=a[n],因为i往后移动,n-i也得往前移动
		a[n-i]=temp;
	}
}

void charge(int A[],int m, int n ,int size){//m是数组头 n是数组尾
	Reverse(A,0,m-1,size); //(a1,a2,a3,……,am)逆置为(am,……,a3,a2,a1); A数组从0到m-1;
	Reverse(A,m,m+n-1,size); //(b1,b2,b3,……,bn)逆置为(bn,……,b3,b2,b1);B数组从m到m+n-1;
	Reverse(A,0,m+n-1,size); //整体逆置((b1,b2,b3,……,bn,a1,a2,a3,……,am);整个从0到m+n-1;
	
	



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值