繁体   English   中英

C++ - 无法从队列中删除元素

[英]C++ - Cannot remove the element from the Queue

我正在尝试删除队列的第一个元素,但这似乎不起作用。 这是我的代码:

#include<iostream>
using namespace std;
int front = -1;
int rear = -1;
int i = 0;
const int size = 4;
int Q[size];

bool isEmpty(){
    return front == -1 && rear == -1;
}
bool isFull(){
    return rear == size - 1;
}
void Enqueue(int x){
    if(isFull()){
        cout << "The Queue is full." <<endl;
    }
    else if(isEmpty()){
        front++;
        rear++;
    }
    else{
        rear++;
    }
    Q[rear] = x;
}
void Dequeue(){
    if(isEmpty()){
        cout << "The Queue is empty." << endl;
    }
    else if(front == rear){
        front = -1;
        rear = -1;
    }
    else{
        front++;
    }
}
void display(){
    cout << "The Queue is: " << endl;
    for(i = 0; i <= rear; i++){
        cout << Q[i] << endl;   
    }
}

int main(){
    Enqueue(1);
    Enqueue(2);
    display();
    Dequeue();
    display();
    return 0;
}

这个Dequeue()函数应该删除front的元素,但它没有这样做。 这是我从上面的代码得到的输出:

The Queue is:
1
2
The Queue is:
1
2

代替 :

The Queue is:
1
2
The Queue is:
2

我尝试了其他一些解决方案,但没有运气。 我似乎无法绕过它。 任何帮助将不胜感激!

你忘了在displayfront开始。 它应该看起来像这样:

void display(){
    cout << "The Queue is: " << endl;
    for(int i = front; i <= rear; ++i) {
        cout << Q[i] << endl;   
    }
}

注意:当队列为空时,此函数将表现不佳(即产生未定义的行为)。 你可以解决这个问题,从int i = std::max(0, front); 或特殊情况下的空箱。

另一种方法是将rear指向最后一个元素之后的元素。 对于front == rear front, rear范围front, rear然后为空,并且范围中的元素数量只是rear - front 这是 C++ 中的常见范例,请参阅任何标准容器的beginend ,例如std::vector

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM