题目
已知在一维数组 A[0, .. m+n-1]中依次存放着两个顺序表 (a1, a2,.,am)和(b,b2, ....b.).试编写程序,将数组中两个顺序表的位置互换,即将(b1, b2, ... , bn) 放在(a1 a2, ... , am)的前面。
分析
题目分析:
解决思路:
代码
核心代码:
/* 位置互换元素 */
/* nums[]指的是要进行互换元素的数组;i指的是起始下标;j指的是结束下标 */
void reverse(int nums[],int i,int j){
int temp;
while(i<j){
temp=nums[i];
nums[i]=nums[j];
nums[j]=temp;
i++;
j--;
}
}
/* 将B中的所有元素移动到A的前面 */
void move(int A[],int m,int n){
reverse(A,0,m-1);
reverse(A,m,m+n-1);
reverse(A,0,m+n-1);
}
完整代码:
#include<stdio.h>
#define maxSize 30
/* 打印数组 */
void print(int nums[],int n) {
printf("\n");
for(int i=0; i<n; i++) {
printf("%d\t",nums[i]);
}
printf("\n");
}
/* 位置互换元素 */
/* nums[]指的是要进行互换元素的数组;i指的是起始下标;j指的是结束下标 */
void reverse(int nums[],int i,int j){
int temp;
while(i<j){
temp=nums[i];
nums[i]=nums[j];
nums[j]=temp;
i++;
j--;
}
}
/* 将B中的所有元素移动到A的前面 */
void move(int A[],int m,int n){
reverse(A,0,m-1);
reverse(A,m,m+n-1);
reverse(A,0,m+n-1);
}
int main() {
int A[maxSize]= {1,2,3,4,5,6,7};
int An=7;
int m=3;
int n=4;
move(A,m,n);
print(A,An);
return 0;
}