0

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

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

4

3 回答 3

3

您正在启动显示循环 i ,front它是 -1。您指向队列前的一个位置。

于 2013-08-14T15:21:04.487 回答
1

如果队列为空并且您将一个元素排入队列x,则x同时成为前排和后排。

于 2013-08-14T15:25:59.210 回答
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;
于 2013-08-14T15:24:23.153 回答