/* 鏈隊 */
typedef struct qnode{ //數據節點類型
ElemType data;
struct qnode *next;
} QNode;
typedef struct{
QNode *front;
QNode *rear;
} LiQueue;
//初始化隊列
void InitQueue(LiQueue *&q){
q=(LiQueue *)malloc(sizeof(LiQueue));
q->front=q->rear=NULL;
}
//銷燬隊列
void DestroyQueue(LiQueue *&q){
QNode *p=q->front,*r;
if(p!=NULL){
r=p->next;
while(r!=NULL){
free(p);
p=r;
r=p->next;
}
}
free(p);
free(q);
}
//判斷隊列是否爲空
bool QueueEmpty(liQueue *q){
return(q->rear==NULL);
}
//進隊
void enQueue(LiQueue *&q,ElemType e){
QNode *p;
p=(QNode *)malloc(sizeof(QNode));
p->data=e;
p->next=NULL;
if(q->rear==NULL){
q->front=q->rear=p;
}
else{
q->rear->next=p;
q->rear=p;
}
}
//出隊
bool deQueue(LiQueue *&q,ElemType &e){
QNode *t;
if(q->rear==NULL){
return false;
}
t=q->front;
if(q->front==q->rear){
q->front=q->rear=NULL;
}
else{
q->front=q->front->next;
}
e=t->data;
free(t);
return true;
}