#include #include "QueueT.h" using namespace std; struct QueueNodeT { QueueDataT data; QueueNodeT * next; }; QueueT::QueueT(){ size = 0; front = nullptr; rear = nullptr; } void DeleteList(QueueNodeT * & head) { QueueNodeT * tmp{head}; while (head != nullptr) { head = head->next; delete tmp; tmp = head; } return; } QueueT::~QueueT() { size = 0; rear = nullptr; DeleteList(front); return; } void QueueT::Enqueue(QueueDataT data){ QueueNodeT * tmp; tmp = new QueueNodeT; tmp->next = nullptr; tmp->data = data; if (rear != nullptr) { rear->next = tmp; } else { front = tmp; } ++size; rear = tmp; } void QueueT::Dequeue(){ QueueNodeT * tmp; tmp = front; if (front == nullptr) { cerr << "Error: Attempt to do Dequeue on an empty queue" << endl; } else { front = front->next; delete tmp; size --; if (front == nullptr) { rear = nullptr; } } } QueueDataT QueueT::Front() const{ QueueDataT value{-1}; if (front != nullptr) { value = front->data; } else { cerr << "Error: Attempt to do Front on an empty queue" << endl; } return value; } size_t QueueT::Size() const{ return size; }