队列的数组实现:奇怪的输出

时间:2013-08-14 15:18:20

标签: c++ queue

我正在学习队列,我编写了以下程序,将队列实现为线性数组(不是循环数组)。

   #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个?这是垃圾值吗?不使用循环数组实现,可能的原因是什么? 我不知道。任何帮助赞赏。

3 个答案:

答案 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;