c
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define IBFEASIBLE -1
#define OVERFLOW -2
typedef int Status;
#define nullE -99
typedef int ElemType;
typedef struct QNode {
ElemType data;
struct QNode *next;
} QNode, *QueuePtr;
typedef struct {
QueuePtr front;
QueuePtr rear;
} *LinkQueue;
LinkQueue InitQueueL() {
LinkQueue Q;
if(!(Q = (LinkQueue)malloc(sizeof(*Q)))) exit(OVERFLOW);
if (!(Q->front = Q->rear = (QueuePtr)malloc(sizeof(QNode)))) exit(OVERFLOW);
Q->front->next = NULL;
return Q;
}
LinkQueue FreeQueueL(LinkQueue Q) {
if (!Q) return NULL;
QueuePtr q, p = Q->front;
while (p) {
q = p; p = p->next; free(q);
}
free(Q); return NULL;
}
Status EnQueueL(LinkQueue Q, ElemType e) {
if (!Q) return ERROR;
QueuePtr p;
if (!(p = (QueuePtr)malloc(sizeof(QNode)))) return ERROR; // 分配新结点
p->data = e; p->next = NULL;
Q->rear->next = Q->rear = p;
return OK;
}
ElemType DeQueueL(LinkQueue Q) {
if (!Q || Q->front==Q->rear) return nullE;
QueuePtr p = Q->front->next;
ElemType e = p->data;
Q->front->next = p->next;
if (Q->rear==p) Q->rear = Q->front;
free(p);
return e;
}