对比两个顺序表大小,如何解决?

创建两个顺序表并对其大小进行对比
问题显示有多重定义符号,main已被定义
不知道哪里的问题,万分感谢

img

#include<iostream>
using namespace std;

int Compare(int Aa[], int Bb[], int a, int b)
{
    int i = 0, j = 0;
    while (i < a && j < b)//处理A与B顺序表中的公共部分
    {
        if (Aa[i] == Bb[i])
        {
            i++;
        }
        else
            j = i;
        break;//找到公共相同的前i-1项
    }
    if (i-1 == a && j-1 == b)//此时A=B,应返回0
    {
        return 0;
    }
    else if (Aa[j] < Bb[j] && (a < b || a == b))//此时A<B,返回-1
    {
        return -1;
    }
    else//其他情况均为A>B,返回1
        return 1;
}

int main()
{
    const int n = 10;
    const int m = 10;
    int A[n] = { 1,2,3,4,5,6,7,8,9,10 };
    int B[m] = { 1,2,3,5,6,9,8,7,4,10 };
    cout << Compare(A, B, n, m);
}





处理A与B顺序表中的公共部分时,应该使用 Bb[j] 来比较 Bb 中的元素,而不是 Bb[i]


#include<iostream>
using namespace std;

int Compare(int Aa[], int Bb[], int a, int b)
{
    int i = 0, j = 0;
    while (i < a && j < b)//处理A与B顺序表中的公共部分
    {
        if (Aa[i] == Bb[j])
        {
            i++;
            j++; // 比较下一项
        }
        else
            break; // 找到第一个不同的元素,退出循环
    }
    if (i == a && j == b)//此时A=B,应返回0
    {
        return 0;
    }
    else if (j < b && (i == a || Aa[i] < Bb[j]))//此时A<B,返回-1
    {
        return -1;
    }
    else//其他情况均为A>B,返回1
        return 1;
}

int main()
{
    const int n = 10;
    const int m = 10;
    int A[n] = { 1,2,3,4,5,6,7,8,9,10 };
    int B[m] = { 1,2,3,5,6,9,8,7,4,10 };
    cout << Compare(A, B, n, m);
    return 0;
}

img

错误提示贴出来看一下

这段代码的问题在于比较函数Compare中的while循环中的else语句中有break语句,导致循环只会执行一次,而不会继续比较后面的元素。正确的逻辑应该是当A和B中元素不相同时,记录下此时在A中的位置j,并继续比较A[j+1]和B[i+1]直到遇到不相同的元素或者某一个顺序表遍历完毕。

改完之后代码如下:

int Compare(int Aa[], int Bb[], int a, int b)
{
    int i = 0, j = 0;
    while (i < a && j < b)//处理A与B顺序表中的公共部分
    {
        if (Aa[i] == Bb[i])
        {
            i++;
        }
        else {
            j = i;//记录此时在A中的位置j
            while (j < a && i < b && Aa[j] == Bb[i]) {
                j++;
                i++;
            }
            break;
        }
    }
    if (i == a && j == b)//此时A=B,应返回0
    {
        return 0;
    }
    else if (i < b && Aa[i] < Bb[i] && (a <= b))//此时A<B,返回-1
    {
        return -1;
    }
    else//其他情况均为A>B,返回1
        return 1;
}

博主可以了解一下

不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^