#include #include "QueueT.h" //typedef int QueueDataT; struct QueueNodeT{ QueueDataT data; QueueNodeT * next; }; QueueT::QueueT(){ size = 0; front = nullptr; rear = nullptr; } void DeleteQueue(QueueNodeT * & front) { QueueNodeT * tmp; while(front != nullptr) { tmp = front; front = front->next; delete tmp; } } void CopyQueue(QueueNodeT * & front, QueueNodeT * & rear, QueueNodeT * src) { QueueNodeT * trace; QueueNodeT * tmp; rear = nullptr; front = nullptr; trace = src; while (trace != nullptr) { tmp = new QueueNodeT; tmp->next = nullptr; tmp->data = trace->data; if (rear == nullptr) { front = tmp; rear = tmp; } else { rear->next = tmp; rear = tmp; } trace = trace->next; } } QueueT::QueueT(const QueueT & src){ CopyQueue(front, rear, src.front); size = src.size; } QueueT::~QueueT(){ DeleteQueue(front); rear = nullptr; size = 0; } QueueT & QueueT::operator=(const QueueT & src){ if (this != & src) { DeleteQueue(front); CopyQueue(front, rear, src.front); size = src.size; } return * this; } void QueueT::Enqueue(QueueDataT data){ QueueNodeT * tmp; tmp = new QueueNodeT; tmp->data = data; tmp->next = nullptr; if (rear == nullptr) { front = tmp; rear = tmp; } else { rear->next = tmp; rear = tmp; } size++; } void QueueT::Dequeue(){ QueueNodeT * tmp; if (front != nullptr) { tmp = front; front = front->next; delete tmp; if (front == nullptr) { rear = nullptr; } size --; } } QueueDataT QueueT::Front(void) const{ QueueDataT data{0}; if (front != nullptr) { data = front->data; } return data; } size_t QueueT::Size(void) const{ return size; }