Procedury drukowały nie to co miał na myśli autor programu, Porównaj tę wersję z poprzednią. Masz buga w funkcji dequeue
, uruchomienie i :
➜ tests ./a.out
2
Enqueue 1
--->
Dequeue
0
Jak widać w kolejce miało być jeden a nie zero. Kod (dequeue
nie zdebugowana):
#include <iostream>
using namespace std;
#include <string>
const int SIZE = 10;
int A[SIZE];
int front = -1;
int rear = -1;
bool isempty() {
if (front == -1 && rear == -1)
return true;
else
return false;
}
void enqueue(int value) {
if (rear == SIZE - 1)
cout << "Error: queue is full \n";
else {
if (front == -1)
front = 0;
rear++;
A[rear] = value;
cout << "--->\n";
}
}
void dequeue() {
if (isempty())
cout << "Error: queue is empty\n";
else if (front == rear)
front = rear = -1;
else
front++;
cout << A[front - 1] << "\n";
}
void displayQueue() {
if (isempty())
cout << "Print: queue is empty\n";
else {
cout << "Print:";
for (int i = front; i <= rear; i++)
cout <<" "<< A[i];
}
cout << " \n";
}
int main() {
int ile;
cin >> ile;
for (int i = 0; i < ile; i++) {
string str;
cin >> str;
int wlozyc;
if (str == "Enqueue")
if (cin >> wlozyc)
enqueue(wlozyc);
if (str == "Dequeue")
dequeue();
if (str == "Print")
displayQueue();
}
return 0;
}