创建两个顺序表并对其大小进行对比
问题显示有多重定义符号,main已被定义
不知道哪里的问题,万分感谢
#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;
}
错误提示贴出来看一下
这段代码的问题在于比较函数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;
}
博主可以了解一下
不知道你这个问题是否已经解决, 如果还没有解决的话:如果有大量的定时任务,我们首先要想到用哪一个数据结构去组织这些大量的定时任务。定时器的本质是越近要触发的任务,其优先级越高。也就是说,需要根据时间这个key来排序。那么有序的数据结构有哪些呢?红黑树,最小堆,跳表,时间轮。