Instructions
Requirements and Specifications
Source Code
#ifndef wordstack_h
#define wordstack_h
#include
#include
using namespace std;
// A stack that holds words
class WordStack
{
private:
// Node to be used to building a linked list of stack
struct Node
{
string word;
Node *next;
// Create a new node that holds a word
Node(const string &word)
{
this->word = word;
next = NULL;
}
};
Node *top;
int numWords;
public:
// Create a stack
WordStack()
{
top = NULL;
numWords = 0;
}
// Destructor to delete nodes if there are still left
~WordStack()
{
Node *current = top;
while (current != NULL)
{
Node *next = current->next;
delete current;
current = next;
}
}
// Add a new word to the stack
void push(const string &word)
{
Node *node = new Node(word);
node->next = top;
top = node;
numWords++;
}
// Remove the top element and return it
string pop()
{
if (top == NULL)
return "";
string word = top->word;
top = top->next;
numWords--;
return word;
}
// Return the number of elements
int size()
{
return numWords;
}
// Check if stack is empty
bool isEmpty()
{
return numWords == 0;
}
// Print the stack to the output stream
friend ostream& operator << (ostream &out, const WordStack &stack)
{
Node *current = stack.top;
while (current != NULL)
{
out << current->word;
current = current->next;
if (current != NULL)
out << ", ";
}
return out;
}
}
#endif