spoj https://www.spoj.com/WWSIASD/problems/ASD_4_2/ . Przy wpisaniu Enqueue12 wyskakuje komunikat queue is full poniżej kod.
#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){
cout << A[front] << "\n";
front = -1;
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()
{
string str;
while (cin >> str) {
int wlozyc;
if (str == "Enqueue") {
if (cin >> wlozyc) {
enqueue(wlozyc);
}
} else if (str == "Dequeue") {
dequeue();
} else if (str == "Print") {
displayQueue();
}
}
return 0;
}
analizując swój kod stwierdziłem że warunek na queue is full nie ma sensu gdyż usuwa rzeczy z kolejki robiąc front++ oto modyfikacja
void enqueue(int value) {
if (rear == SIZE)
cout << "Error: queue is full\n";
else {
if (front == -1)
front = 0;
rear++;
A[rear] = value;
cout << "--->\n";
}
}
dequeue
void dequeue() {
if (isempty()){
cout << "Error: queue is empty\n";
}
else if (front == rear){
cout << A[front] << "\n";
front = -1;
rear = -1;
}
else{
front++;
cout << A[front - 1] << "\n";
Display
void displayQueue() {
if (isempty())
cout << "Print: Queue is empty\n";
else {
cout << "Print:";
for (int i = front; i <= rear; i++)
cout <<" "<< A[i];
}
else{
for(int j=rear;j<=front;j++)
cout<<" " << A[j];
}
cout << " \n";
}
}
}