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