[英]Why am I getting an undesired output in my Array Queue program?
該程序是我嘗試編程的基於數組的隊列。
我得到的令人困惑的輸出是:
入隊500
4199136 500
我無法弄清楚為什么在Output函數中的空格之后輸出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;
}
部分原因是您的front
和back
初始值超出了數組索引的范圍,部分原因是您未正確處理front
。
調用Enqueue(500)
, front
仍為-1
, back
仍為0
。 當您調用Output
,這將輸出兩個值,一個在a[-1]
(未定義行為),另一個在a[0]
。
您的Output
函數(可能還有其他地方)無需將a[front]
處的值視為數組的有效元素。
問題似乎出在count = (back + MAX_SIZE - front) % MAX_SIZE + 1;
聲明。
注意在Q.Enqueue(500);
back = 0,front = -1的值。
因此, count
將計算為(0 + 10-(-1))%10 +1 = 2。
現在,你可以理解,計數是第一錯后Enqueue
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.