将两个顺序表位置互换
这里使用了书上的一种不借用辅助数组的算法,先将两个顺序表整体逆置,两个顺序表的位置正好互换过来但是两个表内的元素顺序被弄反,所以在分别对两个顺序表进行一次整体逆置即可,代码如下:
#include<stdio.h>
#include<stdlib.h>
typedef int Datatype;
void Reverse(int a[],int left,int right,int size)
{ int mid=(left+right)/2;
if(left>=right||right>size)
return;
for(int i=left;i<=mid;i++)
{
Datatype temp=a[i];
a[i]=a[right-i+left];
a[right-i+left]=temp;
}
}
void Exchange(int a[],int m,int n,int size)
{
Reverse(a,0,m+n-1,size);
Reverse(a,0,n-1,size);
Reverse(a,n,m+n-1,size);
}
int main()
{
int size=100;
int a[size],m,n;
printf("请输入第一个顺序表长度:");
scanf("%d",&m);
printf("请输入第一个顺序表:");
for(int i=0;i<m;i++)
scanf("%d",&a[i]);
printf("请输入第二个顺序表长度:");
scanf("%d",&n);
printf("请输入第二个顺序表:");
for(int j=m;j<m+n;j++)
scanf("%d",&a[j]);
Exchange(a,m,n,size);
for(int i=0;i<m+n;i++)
printf("%d ",a[i]);
return 0;
}
此题与2010年的统考题差不多,统考的那道题是将R中的序列循坏右移P;我们只要将R的后P个元素看成一个线性表,前N-P个看成另一个,然后使用本题的算法即可