Assignment 4 Solutions
Solution queue.cc code:
/**************************************************** * Name: Brenda Student * Date: 3/16/14 * Course: CSCI 132 Section 01 * Assignment: Assignment 4 * Instructor: Royden * File name: Queue.cc * Purpose: Implementation of Queue class *****************************************************/ #include "queue.h" Queue :: Queue(const Queue &original) // copy constructor /* Post: The Queue is initialized as a copy of Queue original. */ { Node *new_copy, *original_node = original.front; //pointers to first node if (original_node == NULL) front = rear = NULL; else { // Duplicate the linked nodes. front= rear = new_copy = new Node(original_node->entry); while (original_node->next != NULL) { original_node = original_node->next; new_copy->next = new Node(original_node->entry); new_copy = new_copy->next; } //end while rear = new_copy; } //end if--else } //end Queue() void Queue :: operator = (const Queue &original) /* Post: The Queue is reset as a copy of Queue original. */ { //Declare pointers to traverse list and make a copy. Node *new_front, *new_rear,*new_copy, *original_node = original.front; if (original_node == NULL) new_front = new_rear = NULL; else { // Duplicate the linked nodes. new_front= new_rear = new_copy = new Node(original_node->entry); while (original_node->next != NULL) { original_node = original_node->next; new_copy->next = new Node(original_node->entry); new_copy = new_copy->next; } // end while new_rear = new_copy; } //end if--else while (!empty()) //Delete all nodes from pointer being assigned to serve(); front = new_front; rear = new_rear; } //end operator=() Queue :: ~Queue() { /* Post: The Queue is deleted */ while(!empty()) { serve(); } //end while } //end ~Queue Term :: Term(int exponent, double scalar) /* Post: The Term is initialized with the given coefficient and exponent, or with default parameter values of 0. */ { degree = exponent; coefficient = scalar; } Node ::Node() { next =NULL ; } Node ::Node(Node_entry item ,Node *add_on) { entry =item ; next =add_on ; } int Extended_queue::size( ) const /* Post: Return the number of entries in the Extended_queue. */ { Node *window = front; int count = 0; while (window != NULL) { window = window->next; count++; } return count; } bool Extended_queue :: full() const /* post: return true if no room in queue */ { Node *new_node = new Node(); return new_node == NULL; } void Extended_queue::clear() /* Post: clear and delete queue entries */ { while (!empty()) { serve(); } } Error_code Extended_queue :: serve_and_retrieve(Queue_entry &item) /* Post: return entry at front of queue in item, then delete front node*/ { if( retrieve(item) == underflow) { return underflow; } return serve(); } Queue::Queue() /* Post: The Queue is initialized to be empty. */ { front = rear = NULL; } bool Queue::empty() const /* Post: Return true if the Queue is empty, otherwise return false. */ { return front == NULL; } Error_code Queue::append(const Queue_entry &item) /* Post: item is added to the rear of the Queue. If the Queue is full return an Error_code of overflow and leave the Queue unchanged. */ { Node *new_rear = new Node(item); if (new_rear == NULL) return overflow; if (rear == NULL) front = rear = new_rear; else { rear->next = new_rear; rear = new_rear; } return success; } Error_code Queue::serve() /* Post: The front of the Queue is removed. If the Queue is empty return an Error_code of underflow. */ { if (front == NULL) return underflow; Node *old_front = front; front = old_front->next; if (front == NULL) rear = NULL; delete old_front; return success; } Error_code Queue::retrieve(Queue_entry &item) const /* Post: The front of the Queue retrieved to the output parameter item. If the Queue is empty return an Error_code of underflow. */ { if (front == NULL) return underflow; item = front->entry; return success; }
Home | | Syllabus | | Assignments | | Lecture Notes