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