#include <iostream>
// Define the maximum size of the queue
#define MAX_SIZE 128
class Queue {
private:
int arr[MAX_SIZE]; // Array to store queue elements
int first; // Index of the first element
int last; // Index of the last element
int size; // Current size of the queue
public:
// Constructor to initialize the queue
Queue() {
first = 0;
last = -1;
size = 0;
}
// Function to add an element to the queue (enqueue)
void enqueue(int value) {
if (size == MAX_SIZE) {
std::cout << "Queue is full! Cannot enqueue " << value << std::endl;
return;
}
last = (last + 1) % MAX_SIZE;
arr[last] = value;
size++;
std::cout << "Enqueued: " << value << std::endl;
}
// Function to remove an element from the queue (dequeue)
void dequeue() {
if (size == 0) {
std::cout << "Queue is empty! Cannot dequeue.\n";
return;
}
std::cout << "Dequeued: " << arr[first] << std::endl;
first = (first + 1) % MAX_SIZE;
size--;
}
// Function to get the first element of the queue
int peek() {
if (size == 0) {
std::cout << "Queue is empty! No first element.\n";
return -1; // Return an invalid value
}
return arr[first];
}
// Function to check if the queue is empty
bool isEmpty() {
return size == 0;
}
// Function to get the current size of the queue
int getSize() {
return size;
}
// Add this inside the Queue class
void printQueue() {
if (size == 0) {
std::cout << "Queue is empty.\n";
return;
}
std::cout << "Queue contents: ";
for (int i = 0; i < size; ++i) {
int index = (first + i) % MAX_SIZE;
std::cout << arr[index] << " ";
}
std::cout << std::endl;
}
};
int main() {
Queue q;
// Enqueue elements
q.enqueue(10);
q.enqueue(20);
q.enqueue(30);
// Display the first element
std::cout << "\nfirst element: " << q.peek() << "\n\n";
q.printQueue();
std::cout << "\n";
// Dequeue elements
q.dequeue();
q.dequeue();
// Check if the queue is empty
if (q.isEmpty()) {
std::cout << "\nQueue is empty.\n\n";
} else {
std::cout << "\nQueue is not empty. Current size: " << q.getSize() << "\n\n";
}
// Enqueue more elements
q.enqueue(40);
q.enqueue(50);
q.printQueue();
std::cout << "\n";
// Display the first element
std::cout << "first element: " << q.peek() << "\n\n";
}
/*
run:
Enqueued: 10
Enqueued: 20
Enqueued: 30
first element: 10
Queue contents: 10 20 30
Dequeued: 10
Dequeued: 20
Queue is not empty. Current size: 1
Enqueued: 40
Enqueued: 50
Queue contents: 30 40 50
first element: 30
*/