bool Push( ElementType X, Deque D )
{
if((D->Rear+1)%D->MaxSize==D->Front)
return false;
D->Front--;
D->Front=(D->Front+D->MaxSize)%D->MaxSize;
D->Data[D->Front]=X;
return true;
}
ElementType Pop( Deque D ){
if(D->Front==D->Rear)return ERROR;
ElementType t=D->Data[D->Front];
D->Front++;
D->Front=D->Front%D->MaxSize;
return t;
}
bool Inject( ElementType X, Deque D ){
if((D->Rear+1)%D->MaxSize==D->Front)return false;
D->Data[D->Rear]=X;
D->Rear++;
D->Rear%=D->MaxSize;
return true;
}
ElementType Eject( Deque D ){
if(D->Front==D->Rear)return ERROR;
D->Rear--;
D->Rear=(D->Rear+D->MaxSize)%D->MaxSize;
ElementType t=D->Data[D->Rear];
return t;
}
双端队列是对队列的无限制形式,队列的定义是FIFO先进先出,双端队列就是两边都可以插入和删除,可以想象rear和front中间有个人站着,push和pop在人的左边进行,Inject和Eject在人的右边进行,这里是多建了个空间,用于区分满队列和空队列的区别。然后注意就是不能数组越界所以要取模。