抽象基类 Stack 同 数据结构C++(4)栈——数组实现(arrayStack) 。
异常类 同 数据结构C++(1)线性表——数组实现(arrayList) 。
类 chainNode 同 数据结构C++(3)线性表——链表(vectorList)。
类 listStack 的实现 listStack.h :
#pragma once
#include "Stack.h"
#include "chainNode.h"
#include "myExceptions.h"
template<typename T>
class listStack : public Stack<T>
{
public:
listStack();
~listStack();
bool empty() const;
int size() const;
T &top();
void pop();
void push(const T &theElement);
private:
chainNode<T> *Node;
int stackSize;
};
template<typename T>
listStack<T>::listStack()
{
Node = nullptr;
stackSize = 0;
}
template<typename T>
listStack<T>::~listStack()
{
chainNode<T> *Tmp;
while (Node != nullptr)
{
Tmp = Node->pNext;
delete Node;
Node = Tmp;
}
}
template<typename T>
bool listStack<T>::empty() const
{
return stackSize == 0;
}
template<typename T>
int listStack<T>::size() const
{
return stackSize;
}
template<typename T>
T &listStack<T>::top()
{
if (0 == stackSize)
throw stackEmpty();
return Node->element;
}
template<typename T>
void listStack<T>::pop()
{
if (0 == stackSize)
throw empty();
chainNode<T> *Del = Node;
Node = Del->pNext;
delete Del;
stackSize--;
}
template<typename T>
void listStack<T>::push(const T &theElement)
{
chainNode<T> *New = new chainNode<T>(theElement, Node);
Node = New;
stackSize++;
}
参考文献:
[1].Sartaj Sahni. 数据结构、算法与应用[M]. 机械工业出版社, 2000.