//结构定义
typedef int ElemType
typedef struct Node
{
ElemType data;
struct Node *next;
}ListNode;
typedef struct que
{
ListNode *front;
ListNode *rear;
}ListQue;
//初始化
void InitListQue(ListQue *que)
{
if(que == NULL) exit(0);
que->front = que->rear = NULL;
}
//判空
int Empty(ListQue *que)
{
if(que == NULL) exit(0);
return que->rear == NULL ? 1 : 0;
}
//创建新结点
static ListNode *ApplyNode(ElemType val , ListNode *next)
{
ElemType *s = (ListNode *)malloc(sizeof(ListNode));
if(s == NULL) exit(0);
s->data = val;
s->next = next;
return s;
}
//入队列
void PushListQue(ListQue *que , ElemType val)
{
if(que == NULL) exit(0);
ListNode *newnode = _ApplyNode(val , NULL);
if(newnode == NULL) return;
if(Empty(que)) //入队列之前,队列是空的
{
que->front = que->rear = newnode;
}
else //入队列之前,队列非空
{
que->rear->next =newnode;
que->rear = newnode;
}
}
//出队列
void PopListQue(ListQue *que)
{
if(que == NULL) exit(0);
if(Empty(que)) return;
//队列只有一个结点
if(que->front = que->rear)
{
free(que->front);
que->front = que->rear = NULL;
}
//队列有两个及以上结点
else
{
ListNode *p =que->front ;
que->front = que->front ->next;
free(p);
}
}
//获取队列首元素
int GetHead(ListQue *que , ElemType *reveal)
{
if(que == NULL) exit(0);
if(Empty (que)) return 0;
*reveal = que->data[que->front];
return 1;
}
//销毁
void DestroyListQue(ListQue *que)
{
if(que == NULL) exit(0);
while(!Empty(que))
{
Pop(que);
}
}