该程序是我试图编程的基于阵列的队列 我得到的令人费解的输出是:
排队500 4199136 500
我无法弄清楚为什么 4199136 正在输出输出功能中的空格。
我知道这是我正在制作的某种内存/阵列管理问题,但我可以找到它的缺陷。任何见解都会非常感激。
代码完整地发布在下面。
#include <iostream>
#include <iomanip>
#include <array>
#define MAX_SIZE 10
using namespace std;
class ABQ
{
private:
int a[MAX_SIZE];
int count, front, back;
public:
ABQ()
{
front = -1;
back = -1;
count = 0;
}
bool IsEmpty()
{
return(front == -1 && back == -1);
}
bool IsFull()
{
return (back + 1) % MAX_SIZE == front ? true : false;
}
void Enqueue(int n)
{
cout << "Enqueuing " << n << endl;
if(IsFull())
{
cout << "Array Based Queue is FULL" << endl;
return;
}
else
{
back = (back + 1) % MAX_SIZE;
}
a[back] = n;
}
void Dequeue()
{
if(IsEmpty())
{
cout << "Array Based Queue is EMPTY" << endl;
return;
}
else if(front == back)
{
back = front = -1;
}
else
{
front = (front + 1) % MAX_SIZE;
}
}
int Front()
{
if(front == -1)
{
{
return -1;
}
return a[front];
}
return 0;
}
void Output()
{
count = (back + MAX_SIZE - front) % MAX_SIZE + 1;
for(int i = 0; i < count; i++)
{
int index = (front + i) % MAX_SIZE;
cout << a[index] << " ";
}
cout << endl << endl;
}
};
int main()
{
ABQ Q;
Q.Enqueue(500);
Q.Output();
return 0;
}
答案 0 :(得分:0)
部分原因是front
和back
的初始值超出了数组索引的范围,部分原因是您无法正确处理front
致电Enqueue(500)
后,front
仍为-1
,back
为0
。当您致电Output
时,会输出两个值,一个位于a[-1]
,即未定义的行为,另一个位于a[0]
。
您的Output
函数(可能还有其他地方)不需要将a[front]
的值视为数组的有效元素。
答案 1 :(得分:0)
问题似乎出现在count = (back + MAX_SIZE - front) % MAX_SIZE + 1;
声明中。
请注意,在Q.Enqueue(500);
之后,back = 0和front = -1的值。
因此count
将被计算为(0 + 10 - (-1))%10 + 1 = 2.
现在您可以在第一次Enqueue
之后了解计数错误。