template <class T>
stack<T>::stack()
{
  head.link = NULL;
}

template <class T>
stack<T>::~stack(void)
{
  while( !empty() )
    pop();
}

template <class T>
int stack<T>::full(void)
{
  return 0;
}

template <class T>
int stack<T>::empty(void)
{
	if( head.link == NULL )
		return 1;
	else
		return 0;
}

template <class T>
void stack<T>::push(T x)
{
  stacknode<T> * sn = new stacknode<T>;
  sn->data = x;
  sn->link = head.link;
  head.link = sn;
}

template <class T>
void stack<T>::pop()
{
  stacknode<T> * tmp_ptr = head.link->link;
  delete head.link;
  head.link = tmp_ptr;
}

template <class T>
T stack<T>::top()
{
  return( head.link -> data );
}
