C++实现队列
#ifndef__QUEUE__#define__QUEUE__classCQueue{int*m_pData;intm_nHead,m_nTail;intm_nCount;public:CQueue(intnCount=10);boolisEmpty();boolisFull();voidpush(constint&v);boolpop(int&v);};CQueue::CQueue(intnCount){m_pData=newint[nCount];m_nHead=m_nTail=0;m_nCount=nCount;}voidCQueue::push(constint&value){if(!isFull()){m_pData[m_nTail++]=value;if(m_nTail>=m_nCount)m_nTail=0;}}boolCQueue::pop(int&value){if(isEmpty())returnfalse;value=m_pData[m_nHead++];if(m_nHead>=m_nCount)m_nHead=0;returntrue;}boolCQueue::isFull(){return((m_nTail+1)%m_nCount==m_nHead);}boolCQueue::isEmpty(){returnm_nHead==m_nTail;}#endif
调用方法如下:
#include<iostream>#include"queue.h"usingnamespacestd;intmain(intargc,char*argv[]){CQueuequeue=5;queue.push(2);queue.push(3);queue.push(4);queue.push(5);queue.push(6);queue.push(7);queue.push(8);intc=0;queue.pop(c);cout<<c<<endl;queue.pop(c);cout<<c<<endl;queue.pop(c);cout<<c<<endl;queue.push(9);boolre=queue.pop(c);cout<<re<<":"<<c<<endl;re=queue.pop(c);cout<<re<<":"<<c<<endl;re=queue.pop(c);cout<<re<<":"<<c<<endl;getchar();}
模板化处理后,如下:
#ifndef__QUEUE__#define__QUEUE__template<classT>classCQueue{T*m_pData;intm_nHead,m_nTail;intm_nCount;public:CQueue(intnCount=10);boolisEmpty();boolisFull();voidpush(constT&v);boolpop(T&v);};template<classT>CQueue<T>::CQueue(intnCount){m_pData=newT[nCount];m_nHead=m_nTail=0;m_nCount=nCount;}template<classT>voidCQueue<T>::push(constT&value){if(!isFull()){m_pData[m_nTail++]=value;if(m_nTail>=m_nCount)m_nTail=0;}}template<classT>boolCQueue<T>::pop(T&ch){if(isEmpty())returnfalse;ch=m_pData[m_nHead++];if(m_nHead>=m_nCount)m_nHead=0;returntrue;}template<classT>boolCQueue<T>::isFull(){return((m_nTail+1)%m_nCount==m_nHead);}template<classT>boolCQueue<T>::isEmpty(){returnm_nHead==m_nTail;}#endif
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。