數組中兩線性表位置互換且空間複雜度爲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; 
}

相關文章
相關標籤/搜索