#include template Queue::Queue(int num_elts) { _elts = new T[num_elts]; _head = _tail = 0; _eltsSize = num_elts; } template Queue::Queue(Queue& q) { _head = q._head; _tail = q._tail; _eltsSize = q._eltsSize; memcpy(_elts, q._elts, sizeof(T) * _eltsSize); } template Queue::~Queue() { delete [] _elts; } template const Queue& Queue::operator=(const Queue& q) { if (_elts) delete [] _elts; _head = q._head; _tail = q._tail; _eltsSize = q._eltsSize; memcpy(_elts, q._elts, sizeof(T) * _eltsSize); return *this; } template void Queue::enqueue(T item) { _elts[_tail] = item; _tail = (_tail + 1) % _eltsSize; } template void Queue::dequeue(T& item) { item = _elts[_head]; _head = (_head + 1) % _eltsSize; } template int Queue::isEmpty(void) { return (_head == _tail); } template int Queue::isFull(void) { return (((_tail + 1) % _eltsSize) == _head); }