#include #include "QueueT.h" using namespace std; struct QueueNodeT { string data; QueueNodeT * next; }; QueueT::QueueT(){ front = nullptr; rear = nullptr; size = 0; } void DeleteQueue(QueueNodeT * front){ QueueNodeT * tmp; while (front != nullptr) { tmp = front; front = front ->next; delete tmp; } return; } QueueT::~QueueT(){ DeleteQueue(front); front = nullptr; rear = nullptr; size = 0; return; } void CopyList(QueueNodeT * src, QueueNodeT * & dest, QueueNodeT * & rear) { QueueNodeT * tmp; dest = nullptr; rear = nullptr; while (src != nullptr) { tmp = new QueueNodeT; tmp ->next = nullptr; tmp->data = src->data; if (dest == nullptr) { dest = tmp; rear = tmp; } else { rear ->next = tmp; rear = tmp; } src = src->next; } return; } QueueT::QueueT(const QueueT & src){ CopyList(src.front, front, rear); size = src.size; return; } QueueT & QueueT::operator = (const QueueT & src){ if (this != &src){ DeleteQueue(front); CopyList(src.front,front,rear); size =src.size; } return *this; } void QueueT::Enqueue(std::string s){ QueueNodeT * tmp; tmp = new QueueNodeT; tmp->next = nullptr; tmp->data = s; if(rear != nullptr) { rear->next = tmp; } else { front = tmp; } rear = tmp; size++; return; } void QueueT::Dequeue(){ QueueNodeT * tmp; if (front != nullptr) { tmp = front; front = front->next; delete tmp; if (front == nullptr) { rear = nullptr; } size--; } return; } std::string QueueT::Front(){ string rv = "BAD DATA"; if (front != nullptr) { rv = front->data; } return rv; } bool QueueT::IsEmpty(){ return front == nullptr; } bool QueueT::IsFull(){ return false; } size_t QueueT::Size(){ return size; }