C++ Help

profileeclipse831
7.12.pdf

10/18/21, 7:23 PM Chapter 7 – 2150 Fall 2021 08/23-12/15 CS_3304 22026:...

https://bb.uhd.edu/webapps/blackboard/execute/content/file?cmd=view&content_id=_4397267_1&course_id=_86914_1&framesetWrapped=true 1/2

Figure 7.12 LStack.cpp Implementation

//--- LStack.cpp ------------------------------------------------- #include <new> using namespace std;

#include "LStack.h"

//--- Definition of Stack constructor Stack::Stack() : myTop(0) {}

//--- Definition of Stack copy constructor Stack::Stack(const Stack & original) { myTop = 0; if (!original.empty()) { // Copy first node myTop = new Stack::Node(original.top());

// Set pointers to run through the stack's linked lists Stack::NodePointer lastPtr = myTop, origPtr = original.myTop->next;

while (origPtr != 0) { lastPtr->next = new Stack::Node(origPtr->data); lastPtr = lastPtr->next; origPtr = origPtr->next; } } }

//--- Definition of Stack destructor Stack::~Stack() { // Set pointers to run through the stack Stack::NodePointer currPtr = myTop, // node to be deallocated nextPtr; // its successor while (currPtr != 0) { nextPtr = currPtr->next; delete currPtr; currPtr = nextPtr; } }

//--- Definition of assignment operator Stack & Stack::operator=(const Stack & original) { myTop = 0; if (original.empty()) return *this;

if (this != &original) // check that not st = st { this->~Stack(); // destroy current linked list // Copy first node myTop = new Stack::Node(original.top());

10/18/21, 7:23 PM Chapter 7 – 2150 Fall 2021 08/23-12/15 CS_3304 22026:...

https://bb.uhd.edu/webapps/blackboard/execute/content/file?cmd=view&content_id=_4397267_1&course_id=_86914_1&framesetWrapped=true 2/2

// Set pointers to run through the stacks' linked lists Stack::NodePointer lastPtr = myTop, origPtr = original.myTop->next;

while (origPtr != 0) { lastPtr->next = new Stack::Node(origPtr->data); lastPtr = lastPtr->next; origPtr = origPtr->next; } } return *this; }

//--- Definition of empty() bool Stack::empty() const { return (myTop == 0); }

//--- Definition of push() void Stack::push(const StackElement & value) { myTop = new Stack::Node(value, myTop); }

//--- Definition of display() void Stack::display(ostream & out) const { Stack::NodePointer ptr; for (ptr = myTop; ptr != 0; ptr = ptr->next) out << ptr->data << endl; }

//--- Definition of top() StackElement Stack::top() const { if (!empty()) return (myTop->data); else { cerr << "*** Stack is empty " " -- returning garbage ***\n"; return *(new StackElement); // "Garbage" value } }

//--- Definition of pop() void Stack::pop() { if (!empty()) { Stack::NodePointer ptr = myTop; myTop = myTop->next; delete ptr; } else cerr << "*** Stack is empty -- can't remove a value ***\n";