Write a class called MyStack, that uses a Linked List to store unique integer values and acts like Stack.
This custom class, unlike the standard stack, must have a fixed max size that gets set via a constructor, or default to 10. The class should have its own Node struct, also Exception struct. Whenever the user tries to pop()/top() from an empty stack, or push() a value to a stack with the max size reached, the program should then throw an exception with a meaningful description. Below is how the class would look like:
Note: Exceptions should be thrown from inside the class’s functions – called functions (example: pop), and handled from the driver’s function – calling functions(example: main).
class MyStack
{
public:
struct MyNode
{
int mValue;
MyNode* mNext = nullptr;
MyNode(int aValue) { mValue = aValue; }
};
struct MyException
{
string mDescription;
MyException(string aDescription) { mDescription = aDescription; }
};
MyStack(); // default constructor
MyStack(int aSize); // custom constructor
~MyStack(); // destructor
void Pop(); // removes an item (LIFO)
void Push(int aValue); // adds an item (LIFO)
int Top(); // returns a copy of an item (LIFO)
bool IsEmpty(); // returns true/false
private:
MyNode* mHead; // head of linked list
unsigned int mMaxSize; // size of linked list
};