数据结构之堆栈(链表实现)

/****************************
* Date   : 2015-07-20
* Description: stack.h
*****************************/
#ifndef _STACK_H
#define _STACK_H

template<class T> class LinkedStack;
template<class T>
class Node{
 friend class LinkedStack<T>;
private:
 T data;
 Node<T>* link;
};
//
template<class T>
class LinkedStack{
public:
 LinkedStack() : top(0) { }
 ~LinkedStack();
 bool IsEmpty() const {return top == 0;}
 bool IsFull() const;
 T Top() const;
 LinkedStack<T>& Push(const T &);
 T Pop();
private:
 Node<T> *top;
};
//
template<class T>
T LinkedStack<T>::Top() const
{
 if(IsEmpty())
  throw out_of_range("栈为空!");
 return top->data;
}
//
template<class T>
LinkedStack<T>::~LinkedStack()
{
 Node<T> *p = top;
 while(top)
 {
  p = p->link;
  delete top;
  top = p;
 }
}
//
template<class T>
bool LinkedStack<T>::IsFull() const
{
 try{
  Node<T> *p = new Node<T>;
  delete p;
  return false;
 }catch(runtime_error ex){
  return true;
 }
}
//
template<class T>
LinkedStack<T>& LinkedStack<T>::Push(const T &x)
{
 Node<T> *p = new Node<T>;
 p->data = x;
 p->link = top;
 top = p;
 return *this;
}
//
template<class T>
T LinkedStack<T>::Pop()
{
 if(IsEmpty())
  throw out_of_range("栈为空!");
 Node<T> *p = top;
 T x = top->data;
 top = top->link;
 delete p;
 return x;
}
#endif //_STACK_H

你可能感兴趣的:(数据结构)