数据结构 ---- 链式队列
#include <stdio.h>
#include <stdlib.h>
#include "预定义.h"
typedef int QElemType;
typedef struct QNode
{
QElemType data;
struct QNode* next;
} QNode, * QueuePtr;
typedef struct
{
QueuePtr front;
QueuePtr rear;
} LinkQueue;
int InitQueue(LinkQueue &Q);
int DestroyQueue(LinkQueue &Q);
int ClearQueue(LinkQueue &Q);
int QueueEmpty(LinkQueue Q);
int QueueLength(LinkQueue Q);
int GetHead(LinkQueue Q, QElemType &e);
int EnQueue(LinkQueue &Q, QElemType &e);
int DeQueue(LinkQueue &Q, QElemType &e);
int InitQueue(LinkQueue &Q)
{
Q.front = Q.rear = (QueuePtr) malloc(sizeof(QNode));
if (!Q.front)
exit(OVERFLOW);
Q.front->next = NULL;
return OK;
}
int DestroyQueue(LinkQueue &Q)
{
while (Q.front)
{
Q.rear = Q.front->next;
free((Q.front));
Q.front = Q.rear;
}
return OK;
}
int EnQueue(LinkQueue &Q, QElemType &e)
{
QueuePtr p = (QueuePtr) malloc(sizeof(QNode));
if (!p)
exit(OVERFLOW);
p->data = e, p->next = NULL;
Q.rear->next = p, Q.rear = p;
return OK;
}
int DeQueue(LinkQueue &Q, QElemType &e)
{
if (Q.front == Q.rear)
return ERROR;
QueuePtr p = Q.front->next;
e = p->data;
Q.front->next = p->next;
if (Q.rear == p)
Q.rear = Q.front;
free(p);
return OK;
}