课后习题 2-9 前后两部分数组位置互换

题目:

已知在一维数组A[m+n]中依次存放着两个顺序表A和B,试编写一个函数,将两个顺序表的位置互换。

Array.h

#pragma once
#include<iostream>
using namespace std;

class Array {
public:
    int* data;
    int maxSize;
    int len;
    Array(int size) {
        maxSize = size;
        data = new int[maxSize];
        len = 0;
    }
    void creat(int arr[], int n) {
        for (int i = 0; i < n; i++) {
            data[i] = arr[i];
            len++;
        }
    }
    void addArr(Array b) {
        for (int i = 0; i < b.len; i++) {
            data[i + len] = b.data[i];
        }
        len += b.len;
    }
    void show() {
        for (int i = 0; i < len; i++) {
            cout << data[i] << " ";
        }
        cout << endl;
    }
};

ArrayTools.h

#pragma once
#include"Array.h"

class ArrayTools {
public:
    static void upside(Array& A, int m, int n) {
        int temp;
        if (m <= n) {
            int gap = n - m;
            for (int i = A.len + gap; i >= m; i--) {
                A.data[i] = A.data[i - gap];
            }
            for (int i = 0; i < n; i++) {
                temp = A.data[i];
                A.data[i] = A.data[i + n];
                A.data[i + n] = temp;
            }
        }
        else {
            for (int i = 0; i < m; i++) {
                temp = A.data[i];
                A.data[i] = A.data[i + m];
                A.data[i + m] = temp;
            }
            int gap = m - n;
            for (int i = n; i < A.len; i++) {
                A.data[i] = A.data[i + gap];
            }
        }
    }
};

main.cpp

#include"ArrrayTools.h"

int main() {
    Array A(20);
    Array B(20);
    int a[] = { 1,2,3,4 };
    int b[] = { 5,6 };
    A.creat(a, 4);
    B.creat(b, 2);
    A.addArr(B);
    A.show();
    ArrayTools::upside(A, 4, 2);
    A.show();
    cout << "-------------------------------" << endl;
    Array C(20);
    Array D(20);
    C.creat(b, 2);
    D.creat(a, 4);
    C.addArr(D);
    C.show();
    ArrayTools::upside(C,2,4);
    C.show();
    return 0;
}

猜你喜欢

转载自www.cnblogs.com/SlowIsFast/p/12502528.html
2-9
今日推荐