习题3.13 双端队列 (25point(s))
双端队列(deque,即double-ended queue的缩写)是一种具有队列和栈性质的数据结构,即可以(也只能)在线性表的两端进行插入和删除。若以顺序存储方式实现双端队列,请编写例程实现下列操作:
Push(X,D)
:将元素X
插入到双端队列D
的头;Pop(D)
:删除双端队列D
的头元素,并返回;Inject(X,D)
:将元素X
插入到双端队列D
的尾部;Eject(D)
:删除双端队列D
的尾部元素,并返回。
Example:
bool Push( ElementType X, Deque D )
{
if((D->Rear+1) % D->MaxSize == D->Front) return false;
D->Front = (D->Front-1+D->MaxSize) % D->MaxSize;
D->Data[D->Front] = X;
return true;
}
ElementType Pop( Deque D )
{
ElementType res;
if(D->Front == D->Rear) return ERROR;
res = D->Data[D->Front];
D->Front = (D->Front+1) % D->MaxSize;
return res;
}
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+1) % D->MaxSize;
return true;
}
ElementType Eject( Deque D )
{
ElementType res;
if(D->Front == D->Rear) return ERROR;
D->Rear = (D->Rear-1+D->MaxSize) % D->MaxSize;
return D->Data[D->Rear];
}
思路:
Inject / Eject,Push/Pop 同普通的栈,只是要注意减一操作时要加上 MaxSize 再 mod MaxSize。