//链队列 带有头结点
#include<stdio.h>
#include<stdlib.h>
typedef char DataType;
typedef struct qnode {
DataType data;
struct qnode* next;
}QueueNode;
typedef struct {
QueueNode* front;
QueueNode* rear;
}LinkQueue;
LinkQueue Q;
//构造空队列
void InitQueue(LinkQueue *Q) {
Q->front= (QueueNode*)malloc(sizeof(QueueNode));
Q->rear = Q->front;
Q->rear->next = NULL;
}
//判断空队列
int QueueEmpty(LinkQueue* Q) {
return Q->rear == Q->front;
}
//入队列
void EnQueue(LinkQueue *Q,DataType x) {
QueueNode *p = (QueueNode*)malloc(sizeof(QueueNode));
p->data = x;
p->next = NULL;
Q->rear->next = p;
Q->rear = p;
}
//取头队列
DataType GetFront(LinkQueue *Q) {
if (QueueEmpty(Q)) {
printf("Queue underflow");
exit(0);
}
else {
return Q->front->next->data;
}
}
//删除队列
DataType DeQueue(LinkQueue *Q) {
QueueNode* p;
if (QueueEmpty(Q)) {
printf("Queue underflow");
exit(0);
}
else {
p = Q->front;
Q->front = Q->front->next;
free(p);
return (Q->front->data);
}
}