已知一维数组A[M+N]中依次存放两个线性表(a1,a2,a3,a4....an与b1,b2,b3...bn)试写函数将两顺序表的位置互换

已知一维数组A[M+N]中依次存放两个线性表(a1,a2,a3,a4....an与b1,b2,b3...bn)试写函数将两顺序表的位置互换,即将b1,b2,b3...bn放在a1,a2,a3,a4....an前面


刚看这个题,想的第一种算法是
先将M,N进行比较,如果M大,则将b顺序表前移到表头

a1 a2 a3…an b1 b2 b3…bn 变成
b1 b2 b3…bn a(n+1) a(n+2)…am a1 a2 a3…an
然后再把a1 a2 a3…an往前移m-n
这种算法显然复杂难算

后面发现的一种简单的算法

①先将整个顺序表翻转,然后分别将a,b翻转
a1 a2 a3…an b1 b2 b3…bn 变成
bn…b3,b2,b1 an…a3 a2 a1
②将bn…b3 b2 b1 翻转
b1 b2 b3…bn an…a3 a2 a1
③将 an…a3 a2 a1 翻转
b1 b2 b3…bn a1 a2 a3…an

插入代码:Ctrl/Command + Shift + K

话不多说,上代码

void demo(SqList &L)
{
	int temp,j;
	for(j=0;j<(M+N)/2;j++)//进行倒转操作①
	{
		temp = L.data[j];
		L.data[j] = L.data[M+N-1-j];
		L.data[M+N-1-j] = temp;
	}
	for(j=0;j

如果单独写一个翻转函数也是不错的方法
这里就只写翻转函数了

void exchange(int data[],int left,int right)
{
    int j,temp;
	for(j=0;j<(right-left)/2;j++)
	{
		temp = data[left+i];
		data[left+i] = data[right-i];
		data[right-i] = temp;
	}
}

有问题欢迎指导 小白学习中

你可能感兴趣的:(顺序表)