template <class T> // 栈的元素类型为 T class Stack { public: // 栈的运算集 void clear(); // 变为空栈 bool push(const T item); // item入栈,成功则返回真,否则返回假 bool pop(T &item); // 返回栈顶内容并弹出,成功返回真,否则返回假, bool getTop(T &item); // 返回栈顶内容但不弹出成功返回真,否则返回假, bool isEmpty(); // 若栈已空返回真 bool isFull(); // 若栈已满返回真 };
template <class T> class arrStack : public Stack<T> { private: // 栈的顺序存储 int mSize; // 栈中最多可存放的元素个数 T *st; // 存放栈元素的数组 int top; // 栈顶位置,应小于mSize public: // 栈的运算的顺序实现 arrStack(int size); arrStack(); ~arrStack(); void clear(); bool push(const T item); bool pop(T *item); bool getTop(T *item); bool isEmpty(); bool isFull(); };
template <class T> class Link { public: T data; // 用于保存结点元素的内容 Link *next; // 指向后继结点的指针 Link(const T info, Link *nextValue); Link(Link *nextValue = NULL); };
template <class T> class lnkStack : public Stack<T> { private: // 栈的链式存储 Link<T> *top; // 指向栈顶的指针 int size; // 存放元素的个数 public: // 栈运算的链式实现 lnkStack(int defSize); ~lnkStack(); void clear(); bool push(const T item); bool pop(T *item); bool getTop(T *item); };