Source of LinkedQueue.cpp


  1: //  Created by Frank M. Carrano and Tim Henry.
  2: //  Copyright (c) 2013 __Pearson Education__. All rights reserved.

  4: // PARITALLY COMPLETE.

  6: /** @file LinkedQueue.cpp */

  8: #include "LinkedQueue.h"  
  9: #include <cassert>


 12: template<class ItemType>
 13: bool LinkedQueue<ItemType>::enqueue(const ItemType& newEntry)
 14: {
 15:    Node<ItemType>* newNodePtr = new Node<ItemType>(newEntry);        

 17:    // Insert the new node
 18:    if (isEmpty())
 19:       frontPtr = newNodePtr;        // Insertion into empty queue
 20:    else
 21:       backPtr->setNext(newNodePtr); // Insertion into nonempty queue
 22:    
 23:    backPtr = newNodePtr;            // New node is at back
 24:    
 25:         return true;
 26: }  // end enqueue

 28: template<class ItemType>
 29: bool LinkedQueue<ItemType>::dequeue()
 30: {
 31:         bool result = false;
 32:         if (!isEmpty())
 33:         {
 34:       // Queue is not empty; delete front
 35:                 Node<ItemType>* nodeToDeletePtr = frontPtr;
 36:       if (frontPtr == backPtr)
 37:       {  // Special case: one node in queue
 38:          frontPtr = nullptr;
 39:          backPtr = nullptr;
 40:       }
 41:       else
 42:                    frontPtr = frontPtr->getNext();
 43:                 
 44:                 // Return deleted node to system
 45:       nodeToDeletePtr->setNext(nullptr);
 46:                 delete nodeToDeletePtr;
 47:       nodeToDeletePtr = nullptr;
 48:       
 49:       result = true;
 50:         }  // end if
 51:    
 52:         return result;        
 53: }  // end dequeue