// fifo.h -- A queue of integers (dynamic storage) class Fifo { struct node{ node *next; int value; }; node * head; // whence we dequeue node * tail; // where we enqueue public: Fifo(); // Constructor void enqueue(int who); // enqueue a new value int dequeue(); // dequeue a value from a fifo int isempty(); // check if a fifo is empty }; // fifo.cpp -- A queue of integers (dynamic storage) #include "fifo.h" #define NULL 0 // Constructor Fifo::Fifo() { head = NULL; tail = NULL; } // enqueue a new value void Fifo::enqueue(int who) { node *a = new node; a->next = NULL; a->value = who; if (head == NULL) head = a; else tail->next = a; tail = a; } // dequeue a value from a fifo int Fifo::dequeue() { node *headNode; int who; if (head != NULL) { headNode = head; head = head->next; who = headNode->value; if (head == NULL) tail = NULL; delete headNode; return who; } return 0; // You should never execute this // statement (i.e. do not dequeue // from an empty queue) } // check if a fifo is empty int Fifo::isempty() { return (head == NULL); } // main.cpp -- driver for fifo module // Read a sequence of positive integers, store them in // a fifo, then print them out #include #include "fifo.h" void main(void) { int who; Fifo queue; while(1) { cout << "Enter a positive integer [0 to terminate]: "; cin >> who; if (who <= 0) break; queue.enqueue(who); }; while (!queue.isempty()) { who = queue.dequeue(); cout << who << endl; } }