题目:
设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; }