Implementation of Queue Using Array
Implementation of Queue Using Array
Muzammil Khan
MC-403
IMPLEMENTATION OF QUEUE USING ARRAY
CODE:
#include <iostream>
#include <stdexcept> // For std::overflow_error and std::underflow_error
class QueueArray {
private:
int* arr;
int capacity;
int front_idx;
int rear_idx;
int count;
public:
QueueArray(int size) {
capacity = size;
arr = new int[capacity];
front_idx = 0;
rear_idx = -1;
count = 0;
}
~QueueArray() {
delete[] arr;
}
int dequeue() {
if (isEmpty()) {
throw std::underflow_error("Queue is empty");
}
int item = arr[front_idx];
front_idx = (front_idx + 1) % capacity;
count--;
return item;
}
int peek() {
if (isEmpty()) {
throw std::underflow_error("Queue is empty");
}
return arr[front_idx];
}
bool isEmpty() {
return count == 0;
}
bool isFull() {
return count == capacity;
}
int main() {
try {
QueueArray q(5);
q.enqueue(10);
q.enqueue(20);
q.enqueue(30);
std::cout << "Dequeued item: " << q.dequeue() << std::endl; //
Expected: 10
std::cout << "Front item: " << q.peek() << std::endl; // Expected: 20
std::cout << "Queue size: " << q.getSize() << std::endl; // Expected:
2
q.enqueue(40);
q.enqueue(50);
// q.enqueue(60); // This would throw std::overflow_error
return 0;
}
RESULT:
struct Node {
int data;
Node* next;
class QueueLinkedList {
private:
Node* front_node;
Node* rear_node;
int count;
public:
QueueLinkedList() : front_node(nullptr),
rear_node(nullptr), count(0) {}
~QueueLinkedList() {
while (!isEmpty()) {
dequeue();
}
}
int dequeue() {
if (isEmpty()) {
throw std::underflow_error("Queue is empty");
}
Node* temp = front_node;
int item = temp->data;
front_node = front_node->next;
delete temp;
count--;
if (isEmpty()) { // If queue becomes empty after
dequeue
rear_node = nullptr;
}
return item;
}
int peek() {
if (isEmpty()) {
throw std::underflow_error("Queue is empty");
}
return front_node->data;
}
bool isEmpty() {
return count == 0; // Or front_node == nullptr
}
int main() {
try {
QueueLinkedList q;
q.enqueue(10);
q.enqueue(20);
q.enqueue(30);
q.enqueue(40);
q.enqueue(50);
return 0;
}
RESULT: