#include <stdio.h> 
#include "TemplateStack.h" 

template<class T>
Stack<T>::Stack()
{
  head = NULL;
}

template<class T>
Stack<T>::~Stack()
{
  head = NULL;
}

template <class T>
void
Stack<T>::Push(T x)
{
  head = new StackElem<T>(x, head);
}

template <class T>
T
Stack<T>::Pop()
{
    T value = head->data;
    StackElem<T> *tmp = head;
    head = head->next;
    delete tmp;
    return value;
}