数据结构算法(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;
	
	



猜你喜欢

转载自blog.csdn.net/becomeyee/article/details/125944475
今日推荐