// Source: "Software Design ...", John A Robinson, Newnes, 2004, page 212. class queue { struct item { itemtype *value; item *pnext; } *head, *tail; int queue_length; // To allow the caller to set max length public: queue(int size) { queue_length = size; // Unused in this implementation head = 0; tail = 0; }; ~queue() { item *p; while(head) // Step through, deleting items one by one { p = head; head = head->pnext; delete p; } } int enqueue(itemtype *); int dequeue(itemtype **); }; int queue::enqueue(itemtype *value) { item *p = new item; // Make new item if (tail) // Already something on queue tail = tail->pnext = p; // so tack new item on end else head = tail = p; // Otherwise this is single item on queue so far tail->pnext = 0; // New end of queue tail->value = value; return(0); } int queue::dequeue(itemtype **value) { if (head == 0) return(-1); // Queue already empty *value = head->value; // Get value in head item item *p; p = head; head = head->pnext; // Move head pointer along one delete p; // and delete former head item if (head == 0) // Last item just removed tail = 0; return(0); }