定义以下这样一个队列结构:
#include <stdio.h>
#include <stdlib.h>
#define ElementType int
#define ERROR 1e5
typedef struct Node *PtrToNode;
struct Node {
ElementType Element;
PtrToNode Next, Last;
};
typedef struct DequeRecord *Deque;
struct DequeRecord {
PtrToNode Front, Rear;
};
Deque CreateDeque();
int Push( ElementType X, Deque D );
ElementType Pop( Deque D );
int Inject( ElementType X, Deque D );
ElementType Eject( Deque D );
其中CreateDeque用来创建一个带有头节点的双向队列,并且队列的Front和Rear两个指针均指向那个头节点
Push用来在队列前端插入数据
Pop用于在前端弹出数据并返回数据
Inject用于在队列后端插入数据
Eject用于在后端弹出数据并返回数据
具体实现如下:
需要注意的是Front始终指向头节点,并且用Front与Rear是否均指向头节点来判断队列是否为空
Deque CreateDeque()
{
Deque D = malloc(sizeof(struct DequeRecord));
PtrToNode p = malloc(sizeof(struct Node));
p->Last = p->Next = NULL;