算法:将存放在一个数组中的两个相邻线性表位置互换

已知在一维数组A[m+n]中依次存放两个线性表(a1,a2,a3...,am)和(b1,b2.....,bn)。试编写一个程序,将数组中两个顺序表的位置互换,即将(b1,b2.....,bn)放在(a1,a2,a3...,am)的前面

算法

先倒置数组,然后分别对a和b进行倒置,负负得正使a,b次序交换且保持原有顺序表内容不变

程序代码:

#include <iostream>
#include <functional>
#include <algorithm>
using namespace std;

int main()
{
    int a[9] = { 1,2,3,4,  5,6,7,8,9 };
    int m = 4, n = 5;
    int len = sizeof(a) / sizeof(a[0]);
    for (int i = 0; i < len / 2; i++)
    {
        int temp = a[i];
        a[i] = a[len - i - 1];
        a[len - 1 - i] = temp;
    }
    for (int i = 0; i < n / 2; i++)
    {
        int temp = a[i];
        a[i] = a[n - 1 - i];
        a[n - 1 - i] = temp;
    }
    for (int i = n; i < (m +n+ n) / 2; i++)
    {
        int temp = a[i];
        a[i] = a[m + n+n - 1 - i];
        a[m + n+n - 1 - i] = temp;
    }
    for(auto s:a)
    {
        cout << " " << s ;
    }
}

重点:

要注意的是在整个数组倒置后对于此时的a和b来说,m和n的值发生了交换,不能仍旧认为a的位置是0~m,b的位置是m+1~m+n了

第二个是在程序中第三次倒置时,for的循环条件是i在a没有到达线性表的后一半,即为i<(n+(m+n))/2,不能想当然的写成i<(m+n)/2

猜你喜欢

转载自www.cnblogs.com/murenma/p/13193615.html