用链表实现循环队列,也是写几个常用功能,其实和循环列表大同小异 ,就是它的一个特殊形式而已。
文件"myqueue.h"
#include<iostream>
using namespace std;
template<class T>
class My_queue;
template<class T>
class Node
{
private:
T data;
Node<T> *next;
public:
Node()
{
next=0;
}
Node(T d)
{
data=d;
next=0;
}
friend My_queue<T>;
};
template<class T>
class My_queue
{
private:
Node<T> *tail;
public:
My_queue()
{
tail=new Node<T>();
tail->next=tail;
}
~My_queue()
{
clean();
delete tail;
}
bool empty()
{
return (tail->next==tail);
}
int size()
{
int length=0;
Node<T> *p=tail->next;
p=p->next;
while(p!=tail->next)
{
length++;
p=p->next;
}
return length;
}
void push(T d)
{
Node<T> *p=new Node<T>(d);
p->next=tail->next;
tail->next=p;
tail=p;
}
T front()
{
if(empty())
{
cout<<"queue is empty!"<<endl;
exit(0);
}
Node<T> *p=tail->next;
T data=p->next->data;
return data;
}
T back()
{
if(empty())
{
cout<<"queue is empty!"<<endl;
exit(0);
}
T data=tail->data;
return data;
}
void pop()
{
Node<T> *r=tail->next;
Node<T> *q=r->next;
r->next=q->next;
if(q==tail)
tail=r;
delete q;
}
void clean()
{
Node<T> *p=tail->next;
Node<T> *q=p->next;
while(q!=p)
{
p->next=q->next;
delete q;
p->next=q;
}
cout<<"clean is finished!"<<endl;
}
};
测试代码"main.cpp"
#include"myqueue.h"
int main()
{
My_queue<char> q;
if(q.empty())
cout<<"queue is empty"<<endl;
q.push('I');
q.push('L');
q.push('O');
q.push('V');
q.push('E');
q.push('U');
cout<<"Now the queue's size is: "<<q.size()<<endl;
cout<<"queue's back() is "<<q.back()<<'\n';
cout<<"queue's front() is "<<q.front()<<endl;
while(!q.empty())
{
cout<<q.front()<<" ";
q.pop();
}
cout<<endl;
return 0;
}