// a class, in C++, for Stacks.
#include "List.h"

template <class Elem>
class Stack {
private:
  List<Elem> *elems;

public:
  Stack() : elems(new List<Elem>) {}

  virtual void push(Elem anElement) {
    elems->addFirst(anElement);
  }
  virtual void pop() {
    elems->removeFirst();
  }
  virtual Elem top() {
    elems->first();
  }
};

// instance creation
Stack *aStack = new Stack();
