现在的位置: 首页 > 综合 > 正文

c++链表实现队列

2013年12月13日 ⁄ 综合 ⁄ 共 1143字 ⁄ 字号 评论关闭

template<class T>
class LinkedQueue;
template<class T>
class Node
{
 friend LinkedQueue<T>;
private:
 T data;
 Node<T>* link;
};
template<class T>
class LinkedQueue
{
public:
 LinkedQueue(){front=rear=0;}
    ~LinkedQueue();
    bool IsEmpty() const
    {
  return ((front)?false:true);
 }
   bool IsFull()const;
   T First()const;
   T Last()const;
   LinkedQueue<T>& Add(const T& x);
   LinkedQueue<T>& Delete(T& x);
private:
 Node<T> *front;
 Node<T> *rear;
};

template<class T>
LinkedQueue<T>::~LinkedQueue()
{
 Node<T> * next;
 while(front)
 {
  next=front->link;
  delete front;
  front=next;
 }
}
template<class T>
bool LinkedQueue<T>::IsFull() const
{
 Node<T>* p;
 try
 {
  p=new Node<T>;
  delete p;
  return false;
 }
 catch(){}
}
template<class T>
T LinkedQueue<T>::First()const
{
 if(IsEmpty())exit(0);
 return front->data;
}
template<class T>
T LinkedQueue<T>::Last()const
{
 if(IsEmpty())exit(0);
 return rear->data;
}
template<class T>
LinkedQueue<T>& LinkedQueue<T>::Add(const T &x)
{
 Node<T>* p=new Node<T>;
 p->data=x;
 p->link=0;
 if(front)rear->link=p;
 else
  front=p;
 rear=p;
 return *this;
}

template<class T>
LinkedQueue<T>& LinkedQueue<T>::Delete(T &x)
{
 if(IsEmpty())exit(0);
 x=front->data;
 Node<T>* p=front;
 front=front->link;
 delete p;
 return *this;
}

抱歉!评论已关闭.