已知在一维数组A[m + n]中依次存放两个线性表(a1, a2, a3, a4…am)与(b1, b2, b3…bn)。试写函数将两顺序表的位置互换,即将(b1, b2, b3…bn)放在(a1, a2, a3, a4…am)前面
思路1:既然是数组,我想的是把数组元素对换,比如:A[0](a1)与A[m](b1)对换,但这样就要考虑一对一对调之后就会有元素剩下的情况 思路2:把bn元素一个个插到a1前面,这样太麻烦了 思路3(参考算法思想):
void Reverse(DataType A[],int left,int right,int arraySize) {
int t;
int i;
if (left >= right || right >= arraySize) {
return;
}
for (i = 0; i <= (left + right) / 2; i++) {
t = A[left + i];
A[left + i] = A[right - i];
A[right - i] = t;
}
}
void Alter(DataType A[], int m, int n, int arraySize) {
Reverse(A, 0, m - 1, arraySize);
Reverse(A, m, m + n - 1, arraySize);
Reverse(A, 0, m + n - 1, arraySize);
}
|