#include <iostream> {
if (front == 0)
struct node return false;
{
int data; if (front == rear)
node *next; {
delete front;
// Constructor for node front = rear = 0;
node(int d, node *n = 0) }
{ else
data = d; {
next = n; node *t = front;
} front = front->next;
}; delete t;
}
class queue return true;
{ }
node *front, *rear;
// Retrieve the front element without removing
public: it
// Constructor for queue bool queue::retrieve(int &el)
queue(); {
if (front == 0)
// Check if the queue is empty return false;
bool empty(); el = front->data;
return true;
// Append an element to the queue }
void append(int el);
// Print the elements of the queue
// Serve (remove) the front element void queue::print()
from the queue {
bool serve(); node *current = front;
while (current != 0)
// Retrieve the front element without {
removing it std::cout << current->data <<
bool retrieve(int &el); " ";
current = current->next;
// Destructor (not implemented in the }
provided code) std::cout << std::endl;
// ... }
// Print the elements of the queue // Main function
void print(); int main()
}; {
// Create a queue
// Check if the queue is empty queue myQueue;
bool queue::empty()
{ // Append elements to the queue
return front == 0; myQueue.append(10);
} myQueue.append(20);
myQueue.append(30);
// Constructor for the queue
queue::queue() // Print the initial state of the
{ queue
front = rear = 0; std::cout << "Initial queue: ";
} myQueue.print();
// Append an element to the queue // Retrieve and print the front
void queue::append(int el) element without removing it
{ int frontElement;
if (front == 0) if (myQueue.retrieve(frontElement))
front = rear = new node(el); std::cout << "Front element:
else " << frontElement << std::endl;
rear = rear->next = new
node(el); // Serve (remove) the front element
} from the queue
myQueue.serve();
// Serve (remove) the front element from the
queue // Print the updated state of the
bool queue::serve() queue
std::cout << "Updated queue: ";
myQueue.print();
return 0;
}