双端队列

来源:互联网 发布:简谱制谱mac 编辑:程序博客网 时间:2024/06/05 08:01

今天为了写计算器,还特地写了一个双端队列,目前功能测试正常


//deque.h#define MAXSIZE 10000#define ERROR -1template<typename DATATYPE>class deque{private:DATATYPE * DEQUE;int pfront,prear;public:deque();~deque();bool pop_back();bool pop_front();bool push_back(DATATYPE);bool push_front(DATATYPE);DATATYPE front();DATATYPE back();bool empty();void show();};template<typename DATATYPE> deque<DATATYPE>::deque(){DEQUE=new DATATYPE[MAXSIZE];pfront=0,prear=1;}template<typename DATATYPE>deque<DATATYPE>::~deque(){delete DEQUE;}template<typename DATATYPE>bool deque<DATATYPE>::pop_front(){if(empty())return false;pfront=(pfront+1)%MAXSIZE;return true;}template<typename DATATYPE>bool deque<DATATYPE>::pop_back(){if(empty())return false;prear=(prear+MAXSIZE-1)%MAXSIZE;return true;}template<typename DATATYPE>bool deque<DATATYPE>::push_front(DATATYPE T){if( (pfront+MAXSIZE-1)%MAXSIZE==prear)return false;DEQUE[pfront]=T;pfront=(pfront+MAXSIZE-1)%MAXSIZE;return true;}template<typename DATATYPE>bool deque<DATATYPE>::push_back(DATATYPE T){if((prear+1)%MAXSIZE==pfront)return false;DEQUE[prear]=T;prear=(prear+1)%MAXSIZE;return true;}template<typename DATATYPE>DATATYPE deque<DATATYPE>::front(){if(!empty())return DEQUE[(pfront+1)%MAXSIZE];else throw ERROR;}template<typename DATATYPE>DATATYPE deque<DATATYPE>::back(){if(!empty())return DEQUE[(prear+MAXSIZE-1)%MAXSIZE];else throw ERROR;}template<typename DATATYPE>bool deque<DATATYPE>::empty(){if((pfront+1)%MAXSIZE==prear)return true;return false;}template<typename DATATYPE> void deque<DATATYPE>::show(){int p=(pfront+1)%MAXSIZE;while(p%MAXSIZE!=prear){std::cout<<DEQUE[p]<<" ";p=(p+1)%MAXSIZE;}}