#ifndef QUEUE_H #define QUEUE_H template class Queue { public: virtual ~Queue(){} /* Constructoras */ virtual void Empty() = 0; // retorna la cola vacía virtual void Enqueue(const Etype &x) = 0; /* retorna una cola con último elemento x y el resto de la cola queda igual */ virtual bool IsEmpty() = 0; // retorna true si la cola es vacía virtual Etype Front() = 0; /* pre : la cola no es vacía post: retorna el primer elemento */ virtual void Dequeue() = 0; /* pre : la cola no es vacía post: retorna la cola resultado de borrar el primer elemento */ }; #endif //////////////////////////////////////////////////////////////////////////// #ifndef QUEUEIMP_H #define QUEUEIMP_H #include "Queue.h" template class QueueImp: public Queue{ private: struct nodoQ{ Etype dato; nodoQ* sig; }; typedef nodoQ* PtrQueue; PtrQueue raiz, fin; void DeleteQueue(); public: QueueImp(); ~QueueImp(); void Empty(); void Enqueue(const Etype &x); bool IsEmpty(); Etype Front(); void Dequeue(); }; #include "QueueImp.cpp" #endif //////////////////////////////////////////////////////////////////////////// #ifndef QUEUEIMP_CPP #define QUEUEIMP_CPP #include "QueueImp.h" #include template void QueueImp :: DeleteQueue(){ while(!IsEmpty()) Dequeue(); }; template QueueImp :: QueueImp(){ raiz = new nodoQ; raiz ->sig = NULL; fin = raiz; }; template QueueImp :: ~QueueImp(){ DeleteQueue(); delete[] raiz; }; template void QueueImp :: Empty(){ DeleteQueue(); raiz -> sig = NULL; fin = raiz; }; template void QueueImp :: Enqueue(const Etype &x){ nodoQ* n = new nodoQ; n->dato = x; n-> sig = NULL; fin -> sig = n; fin = fin -> sig; }; template bool QueueImp :: IsEmpty(){ return raiz == fin; }; template Etype QueueImp :: Front(){ assert(raiz != fin); return raiz -> sig -> dato; }; template void QueueImp :: Dequeue(){ assert(raiz != fin); PtrQueue temp = raiz; raiz = raiz -> sig; delete temp; }; #endif