C++ Implementation (Linked-List-Based Queue):

 avatar
unknown
c_cpp
9 months ago
1.7 kB
4
Indexable
#include <iostream>

class Node {
public:
    int data;
    Node* next;
    
    Node(int value) {
        data = value;
        next = nullptr;
    }
};

class LinkedListQueue {
private:
    Node* front;
    Node* rear;

public:
    LinkedListQueue() {
        front = nullptr;
        rear = nullptr;
    }

    bool IsEmpty() {
        return (front == nullptr);
    }

    void Enqueue(int x) {
        Node* newNode = new Node(x);
        if (rear == nullptr) {
            front = rear = newNode;
        } else {
            rear->next = newNode;
            rear = newNode;
        }
        std::cout << "Enqueued: " << x << std::endl;
    }

    void Dequeue() {
        if (IsEmpty()) {
            std::cout << "Queue Underflow!" << std::endl;
            return;
        }
        Node* temp = front;
        std::cout << "Dequeued: " << temp->data << std::endl;
        front = front->next;

        if (front == nullptr) {
            rear = nullptr; // If the queue becomes empty
        }
        delete temp;
    }

    int Peek() {
        if (IsEmpty()) {
            std::cout << "Queue is empty!" << std::endl;
            return -1;
        }
        return front->data;
    }

    ~LinkedListQueue() {
        while (!IsEmpty()) {
            Dequeue();
        }
    }
};

int main() {
    LinkedListQueue q;

    q.Enqueue(10);
    q.Enqueue(20);
    q.Enqueue(30);

    std::cout << "Front element: " << q.Peek() << std::endl;

    q.Dequeue();
    q.Dequeue();
    q.Dequeue();

    q.Dequeue();  // Attempt to dequeue from empty queue

    return 0;
}
Editor is loading...
Leave a Comment