链队列
#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;
}

浙公网安备 33010602011771号