#include using namespace std; template class Node { public: Node(T e, Node* n) { element = e; next = n; } void set_next(Node* n) {next = n;} Node* get_next() { return next;} T get_element() { return element;} private: T element; Node* next; }; template class Queue { public: Queue() { first = NULL; last = NULL; } void enqueue(T element); T dequeue(); bool is_empty() { return (first == NULL); } private: Node* first; Node* last; }; template void Queue::enqueue(T element) { Node* old_last = last; last = new Node(element, NULL); if (old_last == NULL) first = last; else old_last->set_next(last); } template T Queue::dequeue() { if (first==NULL) throw "Dequeue from empty queue."; T e = first->get_element(); Node* old_first = first; first = first->get_next(); if (first == NULL) last ==NULL; delete old_first; return e; } int main() { Queue w; w.enqueue(19); w.enqueue(1); w.enqueue(42); w.enqueue(13); while (! w.is_empty()) cout << w.dequeue() << " "; cout << endl; return 0; }