计算机考研王道数据结构2.2.4编程第8题另解

计算机考研王道数据结构2.2.4编程第8题另解

  • 因为本人考研所以在学习王道的数据结构做到这题的时候有了和答案不一样的想法,打算发出来和大家讨论一下能不能这样解
  • 题目:
    已知在一维数组A【m+n】中依次存放着线性表(a1,a2,a3,…,am)和(b1,b2,b3,…,bn)。试编写一个函数,将数组中两个顺序表的位置互换,即将(b1,b2,b3,…,bn)放在(a1,a2,a3,…,am)前面。
  • 书上的解法:
    ==思路:==首先将数组A[m+n]中的全部元素(a1,a2,a3,…,am,b1,b2,b3,…bn)原地逆置为(bn,bn-1,…b1,am,am-1,am-2,…a1),再对前n个元素和后m个元素分别使用逆置算法,就可以得到(b1,b2,b3,…,bn,a1,a2,a3,…,am),从而实现顺序表的位置互换。

代码

书本的代码

typedef int DataType;
void Reverse(DataType A[],int left,int right,int arraySize){
//逆转(aleft,aleft+1,aleft+2,...aright)为(aright,aright-1,...,aleft)
	if(left>=right||right>=arrSize)
		return;
	int mid=(left+right)/2;
	for(int i =0;i<=mid-left;i++){
		DataType temp=A[left-i];
		A[left+i]=A[right-i];
		A[right-i]=temp;
	}
	
}
void Exchange(DataType A[],int m ,int n,int arraySize){
	/*数组A[m+n]中,从0到m-1存放顺序表(a1,a2,a3,....,am),从m到m+n-1存放顺序表(b1,b2,b3,...,bn),算法将这两个表的位置互换*/
	 Reverse(A,0,m+n-1,arraySize); 
	 Reverse(A,0,n-1,arraySize);
	 Reverse(A,n,m+n-1,arraySize);
}

我的想法
我觉得王道的思维有点略显复杂,实际上,原来的位置+平移长度对全长度进行取余,得到的结果就恰好是最后的坐标,所以这题可以大胆的使用这个方法。
大意如图(画的不好)
计算机考研王道数据结构2.2.4编程第8题另解_第1张图片
代码如下:

代码

我的代码

#include
#include
void  ChangeList(int A[],int m,int n){//A的元素的总量为n+m 
	int temp1=A[0],temp2;//交换中间变量
	int all=m+n;
	if(all&1){//为奇数 
	for(int i=0;i

代码运行结果:
计算机考研王道数据结构2.2.4编程第8题另解_第2张图片

你可能感兴趣的:(数据结构学习)