Topic 2

Queue (Array & LL)

FIFO โ€” First In, First Out

A queue works like a real-life waiting line. First person to join the line gets served first.

Operations: enqueue() โ€” add at the rear, dequeue() โ€” remove from the front

๐Ÿงฉ
Array Queue: Uses front and rear pointers (indexes). Starts at -1.
๐Ÿงฉ
LL Queue: Uses front and rear node pointers. Starts at NULL.
๐Ÿงฉ
Enqueue: Array arr[++rear] | LL inserts Node at rear.
๐Ÿงฉ
Dequeue: Array front++ | LL removes Node at front.

Array Queue vs Linked List Queue

AspectArray QueueLinked List Queue
SizeFixedDynamic
Pointersint front = -1, rear = -1Node *front = NULL, *rear = NULL
Enqueuearr[++rear] = valuerear->next = newNode; rear = newNode;
Dequeuefront++Node* temp = front; front = front->next; delete temp;
Queue Fullrear == size - 1Never full (memory permitting)
#include <iostream>
using namespace std;

class Queue {
private:
    int front, rear, size;
    int* arr;

public:
    Queue(int s) {
        front = rear = -1;
        size = s;
        arr = new int[size];
    }

    bool isFull() {
        return rear == size - 1;
    }

    bool isEmpty() {
        return front == -1 || front > rear;
    }

    // Enqueue
    void enqueue(int value) {
        if (isFull()) {
            cout << "Queue is Full!" << endl;
            return;
        }
        if (front == -1) front = 0;
        arr[++rear] = value;
        cout << value << " enqueued to queue" << endl;
    }

    // Dequeue
    void dequeue() {
        if (isEmpty()) {
            cout << "Queue is Empty!" << endl;
            return;
        }
        cout << arr[front] << " dequeued from queue" << endl;
        front++;
    }

    // Display
    void display() {
        if (isEmpty()) {
            cout << "Queue is Empty!" << endl;
            return;
        }
        cout << "Queue elements: ";
        for (int i = front; i <= rear; i++) {
            cout << arr[i] << " ";
        }
        cout << endl;
    }

    ~Queue() {
        delete[] arr;
    }
};

int main() {
    Queue q(5);
    q.enqueue(10);
    q.enqueue(20);
    q.enqueue(30);
    q.display();        // 10 20 30

    q.dequeue();
    q.display();        // 20 30

    return 0;
}