// queue.cpp // // Source: class notes w/ additions #include using namespace std; class Queue { private: struct Node { Node (int data, Node* next) : mydata(data), mynext(next) {} int mydata; Node *mynext; }; public: Queue() : count(0), myfront(NULL), myback(NULL){} // added count initializer ~Queue(); int front() const; int back() const; bool is_empty() const; void enqueue(const int); void dequeue(); bool Filter(int); void callFilter(); //Calls the filter function // added (begin) int front_and_dequeue(); int count; // added (end) private: Node* myfront; Node* myback; }; /* Implementation of member functions */ Queue :: ~Queue() { if (myfront == NULL) return; for (Node *p = myfront->mynext; p; p=p->mynext) delete myfront; } int Queue :: front() const { return myfront->mydata; } int Queue :: back () const { return myback->mydata; } bool Queue :: is_empty () const { return bool(myfront == NULL); } void Queue :: enqueue(const int d) { Node *p=new Node(d, NULL); if (myback == NULL){ myback=p; myfront=p; } else { p->mynext=myback; myback=p; } // added (begin) count++; // added (end) cout<<"Item entered into the queue: " <mydata<mydata<mynext != myfront) p=p->mynext; int d=myfront->mydata; cout<<"Item removed from queue: "<> value; while (Try < 10) if (value > 0) { Filter(value); break; } else { cout << "Please enter a new value you have " << 10-Try << " chances left: "; cin >> value; Try++; } } bool Queue::Filter(int A){ int B, C, exit, c; c = 0; B = front(); C = B; //to remeber the first value exit = 0; while(exit == 0){ if (front() == A){ dequeue(); exit = 1; break; } else { enqueue(front_and_dequeue()); c += 1; } } for (int i=0; i < count - c; i++)//get back to the original front { enqueue(front_and_dequeue()); } } main() /* A test-drive for queue */ { Queue q; q.enqueue(45); q.enqueue(56); q.enqueue(32); q.enqueue(12); q.enqueue(89); q.callFilter(); q.dequeue(); q.dequeue(); q.dequeue(); q.dequeue(); q.dequeue(); }