版权声明:https://blog.csdn.net/Dream_Weave https://blog.csdn.net/Dream_Weave/article/details/83112615
题目链接:点击打开链接
题目大意:注意这里的 Last 相当于 Pre 的意思。
解题思路:略。
AC 代码
Deque CreateDeque()
{
PtrToNode nd=(PtrToNode)malloc(sizeof(struct Node));
Deque deq=(Deque)malloc(sizeof(struct DequeRecord));
nd->Next=nd->Last=NULL;
deq->Front=deq->Rear=nd;
return deq;
}
int Push(ElementType X, Deque D)
{
PtrToNode nd=(PtrToNode)malloc(sizeof(struct Node));
if(!nd) return 0;
nd->Element=X;
nd->Last=D->Front;
nd->Next=D->Front->Next;
if(D->Front->Next) D->Front->Next->Last=nd;
D->Front->Next=nd;
if(D->Front==D->Rear) D->Rear=nd;
return 1;
}
int Inject(ElementType X, Deque D)
{
PtrToNode nd=(PtrToNode)malloc(sizeof(struct Node));
if(!nd) return ERROR;
nd->Element=X;
nd->Next=NULL;
D->Rear->Next=nd;
nd->Last=D->Rear;
if(D->Rear==D->Front) D->Front->Next=nd;
D->Rear=nd;
return 1;
}
ElementType Pop(Deque D)
{
if(D->Front==D->Rear) return ERROR;
PtrToNode nd=D->Front->Next;
if(D->Front->Next==D->Rear) D->Rear=D->Front;
D->Front->Next=D->Front->Next->Next;
ElementType tmp;
tmp=nd->Element;
free(nd);
return tmp;
}
ElementType Eject(Deque D)
{
if(D->Front==D->Rear) return ERROR;
PtrToNode nd=D->Rear;
ElementType tmp=nd->Element;
D->Rear=D->Rear->Last;
free(nd);
return tmp;
}