今天为了写计算器,还特地写了一个双端队列,目前功能测试正常
//deque.h
#define MAXSIZE 10000
#define ERROR -1
template<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;
}
}