课后习题 2-13 比较A、B大小

题目:

设A=(a1,a2……am)和B=(b1,b2……bm)均为顺序表,A'和B'分别是除去最大 公共前缀后的子表。如A=(b,e,i,j,i,n,g),B=(b,e,i,f,a,n,g),则两者的最大公共前缀为b,e,i,在两个顺序表中除去最大公共前缀后的子表分别为A'=(j,i,n,g),B'=(f,a,n,g)。若A'=B'=空表,则A=B;若A'=空表且B'!=空表,或者两者均不空且A'的第一个元素值小于B'的第一个元素的值 ,则A<B;否则A>B。

 Array.h

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

class Array {
    int* data;
    int maxSize;
    int len;
public:
    Array(int n = 30) {
        maxSize = n;
        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 show() {
        for (int i = 0; i < len; i++) {
            cout << data[i] << " ";
        }
        cout << endl;
    }

    int operator - (Array B) {
        int res = -2;
        int p_a = 0;
        int p_b = 0;
        while (data[p_a] == B.data[p_b] && p_a < len && p_b < B.len) {
            p_a++;
            p_b++;
        }
        if (p_a >= len  && p_b >= B.len ) {
            res = 0;
        }
        else if (p_a >= len && p_b < B.len) {
            res = -1;
        }
        else if (p_a < len && p_b < B.len && data[p_a] < B.data[p_b]) {
            res = -1;
        }
        else {
            res = 1;
        }
        return res;

    }

};

main.cpp

#include"Array.h"

int main() {
    Array A, B;
    int a[] = { 1,2,3,5,7,8 };
    int b[] = { 1,2,3,6,7,8 };
    A.creat(a, 6);
    B.creat(b, 6);
    int res = A - B;
    switch (res)
    {
    case  -2:
        cout << "比较失败" << endl;
        break;
    case -1:
        cout << "A<B" << endl;
        break;
    case 0:
        cout << "A=B" << endl;
        break;
    case 1:
        cout << "A>B" << endl;
        break;
    default:
        cout << "DEFAULT_FALSE!!!" << endl;
        break;
    }
    return 0;
}

猜你喜欢

转载自www.cnblogs.com/SlowIsFast/p/12515985.html