#ifndef QUEUE_DYNAMIC #define QUEUE_DYNAMIC template class Queue { struct Node { T val; Node* next; Node(const T& v) : val(v), next(nullptr) {} }; Node* head; Node* tail; public: Queue(); ~Queue(); Queue(Queue& other) = delete; Queue& operator=(Queue& other) = delete; void push(const T& v); void pop(); T& front(); }; template Queue::Queue() : head(nullptr), tail(nullptr) {} template Queue::~Queue() { while (head != nullptr) pop(); } template void Queue::push(const T& v) { if (head == nullptr) { head = tail = new Node(v); } else { tail->next = new Node(v); tail = tail->next; } } template void Queue::pop() { Node* toDel = head; head = head->next; delete toDel; if (head == nullptr) tail = nullptr; } template T& Queue::front() { return head->val; } #endif