c++ struktura kolejki

#include <iostream>
#include <queue>

// Define a structure for a node in the queue
struct QueueNode {
    int data;
    QueueNode* next;
};

// Define a structure for the queue
struct Queue {
    QueueNode* front;
    QueueNode* rear;
};

// Function to initialize an empty queue
void initQueue(Queue& q) {
    q.front = q.rear = nullptr;
}

// Function to check if the queue is empty
bool isEmpty(const Queue& q) {
    return q.front == nullptr;
}

// Function to enqueue a new element into the queue
void enqueue(Queue& q, int value) {
    QueueNode* newNode = new QueueNode{value, nullptr};
    if (isEmpty(q)) {
        q.front = q.rear = newNode;
    } else {
        q.rear->next = newNode;
        q.rear = newNode;
    }
}

// Function to dequeue an element from the queue
void dequeue(Queue& q) {
    if (!isEmpty(q)) {
        QueueNode* temp = q.front;
        q.front = q.front->next;
        delete temp;
    } else {
        std::cout << "Queue is empty. Cannot dequeue.\n";
    }
}

// Function to get the front element of the queue without dequeueing
int front(const Queue& q) {
    if (!isEmpty(q)) {
        return q.front->data;
    } else {
        std::cerr << "Queue is empty. No front element.\n";
        return -1; // Assuming -1 represents an invalid value
    }
}

// Function to display the elements in the queue
void display(const Queue& q) {
    if (isEmpty(q)) {
        std::cout << "Queue is empty.\n";
    } else {
        std::cout << "Queue elements: ";
        QueueNode* current = q.front;
        while (current != nullptr) {
            std::cout << current->data << " ";
            current = current->next;
        }
        std::cout << "\n";
    }
}

// Function to deallocate memory used by the queue
void clearQueue(Queue& q) {
    while (!isEmpty(q)) {
        dequeue(q);
    }
}

int main() {
    // Example usage of the queue
    Queue myQueue;
    initQueue(myQueue);

    enqueue(myQueue, 10);
    enqueue(myQueue, 20);
    enqueue(myQueue, 30);

    display(myQueue);

    std::cout << "Front element: " << front(myQueue) << "\n";

    dequeue(myQueue);
    display(myQueue);

    clearQueue(myQueue);

    return 0;
}