用链表实现循环队列,也是写几个常用功能,其实和循环列表大同小异 ,就是它的一个特殊形式而已。
文件"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; }