#include #include using namespace std; class Cnode { int value; Cnode *next; friend class Clist; friend class linkedQueue; }; class Clist { public: Clist(); ~Clist(); bool empty() const; int size() const; const int& front() const; const int& back() const; void advance(); void add(const int& e); void remove(); private: Cnode *cursor; friend class linkedQueue; }; class linkedQueue { public: linkedQueue(); int size() const; bool empty() const; const int& front() const; void enqueue(const int& e); void dequeue(); void display(); void showFront(); int count(); private: Clist C; int n; }; Clist::Clist() { cursor = NULL; } Clist::~Clist() { while(!empty()) remove(); } linkedQueue::linkedQueue() : C(), n(0) {} bool Clist::empty() const { if(cursor == NULL) return true; else return false; } bool linkedQueue::empty() const { return n == 0; } const int& linkedQueue::front() const { if (empty()) cout << "Queue is empty\n"; return C.front(); } const int& Clist::front() const { if(empty()) cout << "Queue is empty\n"; return cursor-> next-> value; } const int& Clist::back() const { if(empty()) cout << "Queue is empty\n"; return cursor-> value; } void Clist::advance() { if(empty()) cout << "Queue is empty\n"; cursor = cursor-> next; } int main() { linkedQueue Q; Q.enqueue(6); Q.enqueue(4); Q.enqueue(7); Q.showFront(); cout << endl; Q.display(); Q.dequeue(); Q.display(); Q.dequeue(); Q.display(); Q.enqueue(1); Q.dequeue(); Q.display(); Q.dequeue(); Q.display(); cout << endl; return 0; } void Clist::add(const int& e) { Cnode *v = new Cnode; v-> value = e; v-> next = NULL; if(cursor == NULL) { v-> next = v; cursor = v; } else { v-> next = cursor-> next; cursor-> next = v; } } void linkedQueue::enqueue(const int& e) { C.add(e); C.advance(); n++; } void Clist::remove() { //if(cursor-> next == cursor) Cnode *old = cursor-> next; if(old == cursor) { cursor = NULL; } else { /*Cnode *old; old = cursor; while(old-> next != cursor) old = old-> next; old-> next = cursor-> next; old = cursor; cout << "Number being removed is: " << old-> value; cout << endl; cursor = (old-> next == NULL ? NULL : cursor-> next); delete old;*/ cursor-> next = old-> next; } cout << "Number being removed is: " << old-> value; cout << endl; delete old; } void linkedQueue::dequeue() { if(empty()) { cout << "Queue is empty\n"; return; } C.remove(); n--; } void linkedQueue::display() { if(empty()) { cout << "Queue is empty\n"; } else { Cnode* temp = C.cursor-> next; for(int i = 1; i <= this-> count(); i++) { cout << temp-> value << " " << endl; temp = temp-> next; } } } int linkedQueue::count() { Cnode *v; v = C.cursor; int c = 0; if(C.cursor == NULL) return 0; else c++; while(v-> next != C.cursor) { c++; v = v-> next; } return c; } void linkedQueue::showFront() { if(empty()) cout << "Queue is empty\n"; else cout << "Number at front is: " << C.cursor-> next-> value; }