C ++ - Невозможно удалить элемент из очереди - PullRequest
0 голосов
/ 11 ноября 2018

Я пытаюсь удалить первый элемент очереди, но, похоже, это не работает. Вот мой код:

#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

Я пробовал другие решения, но безуспешно. Я не могу обернуть голову вокруг этого. Любая помощь будет очень ценится!

1 Ответ

0 голосов
/ 11 ноября 2018

Вы забыли начать с front в display. Это должно выглядеть так:

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.

...