#include using namespace std; class Queue { private: struct Node { Node (int data, Node* next) : mydata(data), mynext(next) {} int mydata; Node *mynext; }; public: Queue() : myfront(NULL), myback(NULL) {} ~Queue(); int front() const; int back() const; bool is_empty() const; void enqueue(const int); void dequeue(); void Filter(int); void callFilter(); //Calles the filter function 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::callFilter() { int value, count; count = 0; cout << "Please enter the value that you wish to search for(anything other than 0: "; cin >> value; while (count < 10) if (value > 0) { Filter(value); break; } else { cout << "Please enter a new value you have " << 10-count << " chances left: "; cin >> value; count++; } } void Queue::Filter(int A) { int B, C, count; Node *p=myback; B=front(); C=B; // to remeber the first value // cout<mynext; int d=myfront->mydata; delete myfront; myfront=p;//the dequeue if (front()==A) break; Node *p=new Node(B, NULL);//the enqueue if (myback == NULL){ myback=p; myfront=p; } else { p->mynext=myback; myback=p; } B=front(); if(front()==C) break; dequeue(); } while(front()!=C) { p=p->mynext; B=myfront->mydata; delete myfront; myfront=p; enqueue(B); B=front(); } } 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; } cout<<"Item entered into the queue: " <mydata<mydata<mynext != myfront) p=p->mynext; int d=myfront->mydata; cout << "Item removed from queue: " << d << endl; delete myfront; myfront=p; } } main() /* A test-drive for queue */ { Queue q; q.enqueue(45); q.enqueue(56); q.enqueue(32); q.enqueue(89); q.enqueue(12); q.callFilter(); q.dequeue(); q.dequeue(); q.dequeue(); q.dequeue(); q.dequeue(); }