#include "stdio.h"
#include "stdlib.h"
#include "malloc.h"
typedef char DataType;
typedef struct queuenode
{
DataType data;
struct queuenode * next;
}QueueNode;
typedef struct
{
QueueNode * front;//队头指针
QueueNode * rear;//队尾指针
}LinkQueue;
void InitQueue(LinkQueue * q)
{
q->rear=NULL;
q->front=q->rear;
}
int QueueEmpty(LinkQueue * q)
{
return q->front==NULL && q->rear==NULL; /*如果头尾指针都为空就返回1*/
}
void EnQueue(LinkQueue * q,DataType x)
{
QueueNode * p;
p=(QueueNode *)malloc(sizeof(QueueNode));
p->data=x;
p->next=NULL;
if (QueueEmpty(q))
q->front=q->rear=p;//对空直接插入
else
{
q->rear->next=p; /*建立与生成的节点的链接*/
q->rear=p; /*尾指针加一*/
}
}
DataType DeQueue(LinkQueue * q)
{
DataType x;
if (QueueEmpty(q))
{
printf("Queue is empty, can't dequeue...");
exit(-1); /*包含在函数 <stdlib.h> 中*/
}
QueueNode * p;
p=q->front; //指向对头
x=p->data;
q->front=p->next; //q->front->next;
if (q->rear==p) //只有一个节点,则队空
q->rear=NULL;
free(p);
return x;
}
void Disp(LinkQueue * s)
{
QueueNode * p;
p=s->front;
printf("====================================/n");
while (p!=NULL)
{
printf("%c/n",p->data);
p=p->next;
}
printf("=====================================/n");
}
main()
{
printf("================ 先进先出[FIFO]的链队列 DEMO =============/n");
LinkQueue * s;
s=(LinkQueue *)malloc(sizeof(LinkQueue));
InitQueue(s);
EnQueue(s,'1');
EnQueue(s,'2');
EnQueue(s,'3');
EnQueue(s,'4');
EnQueue(s,'5');
EnQueue(s,'6');
printf("1,2,3,4,5,6 入队后队列中的数据序列为:/n");
Disp(s);
printf("第一个出队数据:%c/n",DeQueue(s));
printf("第二个出队数据:%c/n",DeQueue(s));
printf("第三个出队数据:%c/n",DeQueue(s));
printf("第四个出队数据:%c/n",DeQueue(s));
}