Queue c++实现

来源:互联网 发布:rrelieff算法 编辑:程序博客网 时间:2024/05/17 21:54

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

template <class Type> class Queue;
template <class Type> class QueueItem
{
public:
 friend class Queue<Type>;
 QueueItem(const Type &t):item(t),next(0){}
 Type item;
 QueueItem *next;
};

template <class Type> class Queue
{
public:
 QueueItem<Type> *head;
 QueueItem<Type> *tail;
 void destory();
 void copy_elems(const Queue &);

 Queue():head(0),tail(0){}
 Queue(const Queue &Q):head(0),tail(0)
 {
  copy_elems(Q);
 }
 Queue & operator = (const Queue &);
 ~Queue()
 {
  destory();
 }

 Type &front()
 {
  return head->item;
 }

 const Type &front ()const
 {
  return head->item;
 }
 void push(const Type &);
 void pop();
 bool empty() const
 {
  return head==0;
 }
};

template <class Type>
void Queue<Type>::destory()
{
 while (!empty())
  pop();
}
template <class Type>
void Queue<Type>::pop()
{
 QueueItem<Type> *p=head;
 cout << p->item<<endl;
 head =head->next;
 delete p;
}

template <class Type>
void Queue<Type>::push(const Type &val)
{
 QueueItem<Type> *pt =new QueueItem<Type>(val);
 if( empty()){
  head =tail =pt;
  cout << tail->item<<endl;
 }
 else
 {
  cout << pt->item<<endl;
  tail->next = pt;
  tail =pt;
 }
}
template <class Type>
void Queue<Type>::copy_elems(const Queue &orig)
{
 for( QueueItem<Type> *pt =orig.head; pt; pt=pt->next)
  push(pt->item);
}

template <class Type>
Queue<Type> & Queue<Type>::operator = (const Queue &orig)
{
 Queue<Type> *queue=new Queue<Type>;
 for( QueueItem<Type> *pt =orig.head; pt; pt=pt->next)
  queue.push(pt->item);

 return *queue;
}


//main.cpp
using namespace std;

int main()
{
 int a[5]={2,43,1,4,6};
 Queue<int> fq;
 for (int i=0;i<5;i++){
  fq.push(a[i]);
 }
 //fq.pop();
 return 0;
}