#include <iostream>
#include <stdexcept>
class Queue {
private:
int* arr;
int front;
int rear;
int capacity;
int count;
public:
Queue(int size) : capacity(size), front(0), rear(-1), count(0) {
arr = new int[size];
}
~Queue() {
delete[] arr;
}
void enqueue(int x) {
if (isFull()) {
throw std::runtime_error("Queue is full");
}
rear = (rear + 1) % capacity;
arr[rear] = x;
count++;
}
int dequeue() {
if (isEmpty()) {
throw std::runtime_error("Queue is empty");
}
int x = arr[front];
front = (front + 1) % capacity;
count--;
return x;
}
int peek() const {
if (isEmpty()) {
throw std::runtime_error("Queue is empty");
}
return arr[front];
}
int size() const {
return count;
}
bool isEmpty() const {
return (size() == 0);
}
bool isFull() const {
return (size() == capacity);
}
};
int main() {
Queue q(5);
q.enqueue(1);
q.enqueue(2);
q.enqueue(3);
std::cout << "Front element is: " << q.peek() << std::endl;
std::cout << "Queue size is: " << q.size() << std::endl;
std::cout << "Dequeuing: " << q.dequeue() << std::endl;
std::cout << "Dequeuing: " << q.dequeue() << std::endl;
q.enqueue(4);
q.enqueue(5);
q.enqueue(6);
std::cout << "Queue size is: " << q.size() << std::endl;
try {
q.enqueue(7);
} catch (const std::exception& e) {
std::cout << e.what() << std::endl;
}
while (!q.isEmpty()) {
std::cout << "Dequeuing: " << q.dequeue() << std::endl;
}
try {
q.dequeue();
} catch (const std::exception& e) {
std::cout << e.what() << std::endl;
}
return 0;
}