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
我尝试了其他一些解决方案,但没有成功。我似乎无法理解它。非常感谢任何帮助!
您忘记在 display
中从 front
开始。它应该看起来像这样:
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
是空的,并且范围内的元素数只是 rear - front
。这是 C++ 中的常见范例,请参阅任何标准容器的 begin
和 end
,例如std::vector
.
我正在尝试删除队列的第一个元素,但这似乎不起作用。这是我的代码:
#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
我尝试了其他一些解决方案,但没有成功。我似乎无法理解它。非常感谢任何帮助!
您忘记在 display
中从 front
开始。它应该看起来像这样:
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
是空的,并且范围内的元素数只是 rear - front
。这是 C++ 中的常见范例,请参阅任何标准容器的 begin
和 end
,例如std::vector
.