Code Fragment: LinkedStack1



template <typename Object>
class LinkedStack {
protected:                              	// local node structure
  // ... (insert Node here)
private:                                	// member data
  NodePtr tp;					// pointer to stack top
  int sz;					// number of items in stack
public:
  LinkedStack() {				// default constructor
    tp = NULL;
    sz = 0;
  }
  int size() const { return sz; }		// number of elements in stack
  bool isEmpty() const { return sz == 0; }	// is the stack empty?
  						// return stack top
  Object& top() throw(StackEmptyException) {
    if (isEmpty())
      throw StackEmptyException("Top of empty stack");
    return tp->element;
  }
  void push(const Object& e) {			// push element onto stack
    NodePtr v = new Node(e, tp);
    tp = v;					// v is now the top
    sz++;
  }
  Object pop() throw(StackEmptyException) {	// pop top element
    if (isEmpty())
      throw StackEmptyException("Pop of empty stack");
    NodePtr old = tp;				// node to remove
    tp = tp->next;
    sz--;
    Object result = old->element;		// element to return
    delete old;
    return result;
  }
// ... (insert housekeeping functions here)
};