#include #define N 10 using namespace std; template class queue { private : T *q; int begin; int end; public : queue (void); ~queue (); int isEmpty (); T size (); T pop (void); void push (T i); void showHead (); void showTail (); T makeEmpty (); }; template queue :: queue (void) { if (!(q = new T[N])) { cout << "Can't create array, because hav't free memory!\n"; return; } begin = 0; end = -1; cout << "Initialization ok.\n"; } template queue :: ~queue () { delete q; cout << "\nDestroyed."; } template int queue :: isEmpty () { return (end < 0); } template T queue :: size () { return end + 1; } template void queue :: push (T i) { if (end == N) { cout << "Full.\n"; return; } q[++end] = i; } template T queue :: pop (void) { if (end < 0) { cout << "Empty.\n"; return 0; } T value = q[begin]; for(int i = 0; i < end; ++i) q[i] = q[i + 1]; end -= 1; return value; } template void queue :: showHead () { if(!isEmpty()) { cout << "\nend = " << begin << " "; cout << "Head - " << q[begin]; } else cout << "empty queue\n"; } template void queue :: showTail () { if (!isEmpty()) { cout << "\nTail - " << q[end]; } else cout << "empty queue\n"; } template T queue :: makeEmpty () { begin = 0; end = -1; } int main(int argc, char *argv[]) { queue a; queue b; queue c; cout << "Now queue is empty (return 0):"; cout <<"\n" << a.isEmpty(); for (int i = 0; i < N; i++) { a.push(i); } a.showHead(); cout << "\n" <