带头结点的双向链表:
Deque CreateDeque(){
PtrToNode head = malloc(sizeof(struct Node));
head->Next=head->Last=NULL;
Deque D=malloc(sizeof (struct DequeRecord));
D->Front=D->Rear=head;
return D;
}
int Push( ElementType X, Deque D ){
PtrToNode p=malloc(sizeof (struct Node));
if(p==NULL)
return 0;
p->Element=X;
p->Last=p->Next=NULL;
if(D->Front->Next!=NULL){
p->Last=D->Front;
p->Next=D->Front->Next;
D->Front->Next=p;
p->Next->Last=p;
}
else{
D->Front->Next=p;
p->Last=D->Front;
p->Next=NULL;
D->Rear=p;
}
return 1;
}
ElementType Pop( Deque D ){
if(D->Front==D->Rear)
return ERROR;
PtrToNode p=D->Front->Next;;
if(p==D->Rear){
D->Front->Next=NULL;
D->Rear=D->Front;
}
else{
D->Front->Next=p->Next;
p->Next->Last=D->Front;
}
return p->Element;
}
int Inject( ElementType X, Deque D ){
PtrToNode p=malloc(sizeof (struct Node));
if(p==NULL)
return 0;
p->Element=X;
p->Next=NULL;
p->Last=D->Rear;
D->Rear->Next=p;
D->Rear=p;
return 1;
}
ElementType Eject( Deque D ){
if(D->Front==D->Rear)
return ERROR;
PtrToNode p=D->Rear;;
D->Rear=D->Rear->Last;
D->Rear->Next=NULL;
return p->Element;
}