这是头文件LinkStack.h

//LinkStack.h

#ifndef LINKSTACK_H_INCLUDED
#define LINKSTACK_H_INCLUDED
#include<iostream>
using namespace std;

template<class T>
struct Node
{
   T data;
   Node<T> *next;
};


template<class T>
class LinkStack
{
public:
   LinkStack();
   bool empty()const;
   void pop();
   void push(const T &x);
   int size()const;
   const T&top()const;
   void print()const;
private:
   Node<T>* _top;
   int _size;
};

template<class T>
LinkStack<T>::LinkStack():_size(0),_top(NULL)
{
}

template <class T>
bool LinkStack<T>::empty()const
{
   return _top==NULL;
}

template<class T>
void LinkStack<T>::pop()
{
   if(_top==NULL)
   {
       cout<<"stack is empty"<<endl;
       return;
   }
   Node<T> *t=_top;
   _top=_top->next;
   delete t;
   _size--;
}

template<class T>
void LinkStack<T>::push(const T&x)
{
   Node<T>*t=new Node<T>;
   t->data=x;
   t->next=_top;
   _top=t;
   _size++;
}

template<class T>
int LinkStack<T>::size()const
{
   return _size;
}

template<class T>
const T&LinkStack<T>::top()const
{
   if(_top==NULL)
   {
       cout<<"stack is empty"<<endl;
       T t;
       return t;
   }
   return _top->data;
}

template<class T>
void LinkStack<T>::print()const
{
   Node<T>*t=_top;
   while(t!=NULL)
   {
       cout<<t->data<<" ";
       t=t->next;
   }
   cout<<endl;
}

#endif // LINKSTACK_H_INCLUDED

这是一个使用示例

#include <iostream>
#include"LinkStack.h"
using namespace std;

int main()
{
  LinkStack<int> s;
  s.push(1);
  s.push(7);
  s.print();
  s.print();
  s.push(2);
  s.print();
  cout<<s.top()<<endl;
  s.pop();
  s.print();
  s.pop();
  s.print();
  s.pop();
  s.print();
  return 0;
}

这是运行截图