i创建类队列,我需要找到最小值和最大值。最大值是正确的,但最小值不是。我应该更改数字 头和尾巴以获得正确的结果?如果我以零更改它们,则第一个元素既将变为最大和最小值队列
class myQueue
{
private:
int size, head, tail, *data;
public:
myQueue(int size = 1) :
size(size)
{
data = new int[size];
head = -1;
tail = -1;
}
~myQueue() //
{
delete[] data;
}
void myEnqueue(int el)
{
data[tail] = el;
tail = (tail + 1) % size;
}
int maxEl()
{
int *temp = &data[head];
int max = *temp;
while (*temp != data[tail])
{
temp++;
max = (max > *temp) ? max : *temp;
}
return max;
}
int minEl()
{
int *temp = &data[head];
int min = *temp;
while (*temp != data[tail])
{
temp++;
min = (min < *temp) ? min : *temp;
}
return min;
}
};
int main()
{
myQueue q(5);
int n = 0, el;
while (n < 5)
{
cin >> el;
q.myEnqueue(el);
n++;
}
cout << "The arithmetic mean of the elements = " << q.srArifm(5) << "n";
cout << "Maximum queue element = " << q.maxEl() << "n";
cout << "Minimum queue element =" << q.minEl() << "n";
system("pause");
return 0;
}
构造对象后的tail
是-1
。
当您添加第一个元素时,您的方法MyQueue::myEnqueue
会执行类似的操作:
data[-1]=el;
您的最后一个元素中总是有垃圾,这可能是负数的大数字。Head
为-1也是一个坏主意。
修复:
- 您的头和尾巴应为
0
您添加元素的代码应为:
if (tail == size) { tail = 0; } data[tail++] = el;