链队列

#include<iostream>

template<class T>
struct Node
{
T data;
Node<T> *next;
};
template<class T>
class Queue
{
private:
Node<T> *front, *rear;
public:
Queue();
~Queue();
void Clear();
int Length();
bool Empty(){ return front == rear; };
bool OutQueue(T &e);
void InQueue(const T &e);
void Traverse();
};

template<class T>
Queue<T>::Queue()
{
front = rear = new Node < T > ;
}

template<class T>
Queue<T>::~Queue()
{
Clear();
}
template<class T>
void Queue<T>::Clear()
{
T tmp;
while (Length())
{
OutQueue(tmp);
}
}
template<class T>
bool Queue<T>::OutQueue(T &e)
{
if (Empty())
return false;
else
{
Node<T> *tmp = front->next;
e = tmp->data;
front->next = tmp->next;
if(rear == tmp)
rear = front;
delete tmp;
return true;
}
}

template<class T>
int Queue<T>::Length()
{
int n = 0;
Node<T> *p = front->next;
while (p != NULL)
{
n++;
p = p->next;
}
return n;
}

template<class T>
void Queue<T>::InQueue(const T &e)
{
Node<T> *nnode = new Node < T > ;
nnode->data = e;
nnode->next = NULL;
rear->next = nnode;
rear = nnode;

}
template<class T>
void Queue<T>::Traverse()
{
Node<T> *p = front->next;
while (p != NULL)
{
cout << p->data;
p = p->next;
}
}

 

 

#include<iostream>
#include"Queue.h"

using namespace std;

int main()
{
  Queue<int> q;
  q.InQueue(1);
  q.InQueue(3);
  cout << q.Length();
  q.Traverse();
  cin.get();
  return 0;
}

 

posted @ 2016-05-31 16:03  ranran1203  阅读(125)  评论(0)    收藏  举报