1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
| template <class T> class Stack; template <class T> class StackNode { friend class Stack<T>; private: Type data; StackNode<T> *link; public: StackNode (T d = 0, StackNode<T> * next = NULL) : data(d), link(next) { } };
template <class T> class LinkedStack : public Stack<T> { private: StackNode<T> *top; void output(ostream& os, StackNode <E> *ptr, int& i); public: LinkedStack() : top(NULL) {} ~LinkedStack() { makeEmpty(); } void Push(E x); bool Pop(E& x); bool getTop(E& x) const; bool IsEmpty() const { return top == NULL; } void makeEmpty(); int k = 1; friend ostream& operator << (ostream& os, LinkedStack<E>& s){output(os, s.top, k);} };
|