我正在学习队列,我编写了以下程序,将队列实现为线性数组(不是循环数组)。
#include<iostream>
using namespace std;
class queue {
int front, max_queue, rear, count = 0;
int *items;
public:
queue(int);
~queue();
void enqueue(int);
void dequeue();
bool isEmpty();
int size();
void display();
};
queue::~queue() {
delete []items;
}
queue::queue(int max) {
front = -1;
rear = -1;
max_queue = max;
items = new int[max_queue];
}
void queue::enqueue(int n) {
if (count == max_queue)
cout << "queue is full, no enqueue possible";
else {
items[++rear] = n;
count++;
}
}
void queue::dequeue() {
if (count == 0)
cout << "no dequeue possible, queue already empty";
else {
front--;
count--;
}
}
bool queue::isEmpty() {
return ((count == 0) ? 1 : 0);
}
int queue::size() {
return count;
}
void queue::display() {
if (count == 0)
cout << "nothing to display";
else {
for (int i = front; i <= rear;)
cout << items[i++] << endl;
}
}
int main() {
queue *qe = new queue(10);
qe->enqueue(1);
qe->enqueue(2);
qe->enqueue(3);
qe->enqueue(4);
qe->display();
return 0;
}
我得到以下输出
49
1
2
3
4
RUN FINISHED; exit value 0; real time: 10ms; user: 0ms; system: 0ms
为什么我的输出中有49个?这是垃圾值吗?不使用循环数组实现,可能的原因是什么? 我不知道。任何帮助赞赏。
答案 0 :(得分:3)
您正在使用front
启动显示循环i,即-1。你指着队列前的一个地方。
答案 1 :(得分:1)
如果队列为空且您将某个元素x
入队,那么x
将成为前后两个。
答案 2 :(得分:0)
问题出在您的display
函数中:
for (int i = front; i <= rear;)
cout << items[i++] << endl;
您正在设置i=front
,但之前已设置front=-1
。因此,您尝试访问items[-1]
。您可以设置i=front+1
:
for (int i = front + 1; i <= rear;)
cout << items[i++] << endl;
或继续使用i<rear
并使用++i
代替i++
:
for (int i = front; i < rear;)
cout << items[++i] << endl;