#include "stdio.h"
#include "stdlib.h"
typedef int ElemType;
typedef struct qnode
{ ElemType data; //数据元素
struct qnode *next;
}LinkNode;//结点类型定义
typedef struct{
LinkNode *front;
LinkNode *rear;
}LinkQueue;//队列类型定义
void InitQueue(LinkQueue *&q)//初始化队列
{ q=(LinkQueue *)malloc(sizeof(LinkQueue));
q->front=q->rear=NULL;
}
void DestroyQueue(LinkQueue *&q)//销毁队列
{ LinkNode *p=q->front, *r; //p指向队头数据节点
if (p!=NULL) //释放数据节点占用空间
{ r=p->next;
while (r!=NULL)
{ free(p);
p=r; r=p->next;
}
}
free(p); free(q); //释放链队节点占用空间
}
int QueueEmpty(LinkQueue *q)//判断队空
{
return(q->rear==NULL);
}
void EnQueue(LinkQueue *&q,ElemType e)//入队操作
{ LinkNode *p;
p=(LinkNode *)malloc(sizeof(LinkNode));
p->data=e;
p->next=NULL;
if (q->rear==NULL) //若链队为空,新节点是队首节点又是队尾节点
q->front=q->rear=p;
else
{ q->rear->next=p; //将*p节点链到队尾,并将rear指向它
q->rear=p;
}
}
int DeQueue(LinkQueue *&q,ElemType &e)//出队操作
{ LinkNode *t;
if (q->rear==NULL)
return 0; //队列为空
t=q->front; //t指向第一个数据节点
if (q->front==q->rear) //队列中只有一个节点时
q->front=q->rear=NULL;
else //队列中有多个节点时
q->front=q->front->next;
e=t->data;
free(t);
return 1;
}
int main()
{
LinkQueue *Q;
ElemType e;
InitQueue(Q);//初始化队列测试
EnQueue(Q,10);//入队测试
DeQueue(Q,e) ;//出队测试
printf("出队值为%d\n",e);
if(QueueEmpty(Q))//判断队空测试
printf("空队\n");
else
printf("非空队\n");
DestroyQueue(Q);//销毁队列测试
}