typedef struct node {
datatype data;
struct node *next;
} QueueNode;
typedef struct {
QueueNode *front, *rear;
} LinkQueue;
void InitQueue(LinkQueue *&q) {
q = (LinkQueue *)malloc(sizeof(LinkQueue));
q->front = q->rear = (QueueNode *)malloc(sizeof(QueueNode));
q->front->next = NULL;
}
void SetNull (LinkQueue *q) {
q->rear = q->front;
q->front->next = NULL;
}
int Empty (LinkQueue *q) {
if (q->front == q->rear)
return (1);
else
return (0);
}
void EnQueue (LinkQueue *q, datatype x)
{
q->rear->next = (QueueNode *)malloc(sizeof(QueueNode));
q->rear = q->rear->next;
q->rear->data = x;
q->rear->next = NULL;
}
int DeQueue(LinkQueue *q, datatype &x)
{
QueueNode *s;
if (Empty(q)) {
printf("队列下溢.\n");
return (0);
} else {
s = q->front->next;
if (s->next == NULL) {
q->front->next = NULL;
q->rear = q->front ;
} else
q->front->next = s->next;
x = s->data;
free(s);
return (1);
}
}
int GetFront(LinkQueue *q, datatype &x)
{
if (Empty (q)) {
printf("队列下溢");
return (0);
} else {
x = q->front->next->data;
return (1);
}
}
void Destory(LinkQueue *q) {
QueueNode *s;
datatype x;
while ( ! Empty(q) ) {
DeQueue(q, x);
}
free(q->front);
q->front = NULL;
q->rear = NULL;
}
int main() {
LinkQueue *lq;
InitQueue(lq);
datatype y;
EnQueue(lq, 1);
EnQueue(lq, 2);
EnQueue(lq, 3);
GetFront(lq, y);
printf("队列的队头元素值为%d\n", y);
int flag;
flag = DeQueue(lq, y);
printf("出队列: flag=%d,值为%d\n", flag, y);
flag = DeQueue(lq, y);
printf("出队列: flag=%d,值为%d\n", flag, y);
flag = DeQueue(lq, y);
printf("出队列: flag=%d,值为%d\n", flag, y);
flag = DeQueue(lq, y);
printf("出队列: flag=%d,值为%d\n", flag, y);
Destory(lq);
return 0;
}