数组中两线性表位置互换且空间复杂度为O(1)

问题描述:在一维数组A[m+n]中依次存放两个线性表(a1,a2,a3...am)和(b1,b2,b3...bn)。编写一个函数,将数组中两个顺序表的位置互换,即将(b1,b2,b3...bn)放在(a1,a2,a3...am)的前面。算法

 算法设计思想:首先将数组中的所有元素(a1,a2,a3...am,b1,b2,b3...bn)原地逆置为(bn...b3,b2,b1,am...a3,a2,a1),而后再将前n个元素和后m个元素分别逆置,从而实现顺序表的位置互换。数组

代码及结果:函数

线性表逆序可参考:空间复杂度为O(1)的条件下将顺序表逆置https://blog.csdn.net/Dear_Jia/article/details/108352798.net

#include<stdio.h>
#include "线性表的顺序表示和实现.cpp" 

bool Reverse(int A[],int left,int right,int arraySize){
	//将数组A[]中的(A[left],A[left+1]...A[right])逆置为(A[right],A[right-1]...A[left+1],A[left])
	if(left >= right || right >= arraySize)
		return false; 
	int mid = (left + right)/2;
	for(int i = 0;i <= mid - left;i++){
		int temp = A[i + left];
		A[i + left] = A[right - i];
		A[right - i] = temp;
	}
	return true;
}

void Exchange(int A[],int m,int n,int arraySize){
	//将数组A[m+n]中依次存放的两个线性表(a1,a2,a3...am)和(b1,b2,b3...bn)的位置互换,即将(b1,b2,b3...bn)放在(a1,a2,a3...am)的前面。
	Reverse(A,0,m+n-1,arraySize);
	Reverse(A,0,n-1,arraySize);
	Reverse(A,n,m+n-1,arraySize);
}

int main(){
	//test
	int A[15]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
	printf("数组中线性表位置互换后为:");
	Exchange(A,10,5,15);
	for(int i = 0;i < 14;i++)
		printf("%d ",A[i]);
	printf("%d\n",A[14]);
	
	return 0; 
}

相关文章
相关标签/搜索