代码如下:
#define null 0
#include<stdio.h>
#include<stdlib.h>
typedef int datatype;
typedef struct node
{
datatype data;
struct node* next;
}node;
typedef struct linkqueue
{
node* rear;
node* front;
}linkqueue;
//初始化
void QueueInit(linkqueue* Q)
{
Q->front = null;
Q->rear = null;
}
//判空
int QueueEmpty(linkqueue Q)
{
if (Q.front == null) //只需判断一边即可
return 1;
else
return 0;
}
//链队列无需判满
//入队
int EnQueue(linkqueue* Q, datatype x)
{
node* p;
p = (node*)malloc(sizeof(node));
p->data = x;
p->next = null;
if (Q->front == null)//此时插入的是第一位时,将rear与front指向同一元素
{
Q->rear = p;
Q->front = p;
}
else
Q->rear->next = p;//将p放在rear的后一位
Q->rear = p; //再将rear移到p的位置
return 1;
}
//出队
int DeQueue(linkqueue* Q, datatype* x)
{
node* p;
if (QueueEmpty(*Q))
return 0;
p = Q->front; //将要出列的元素给p
if (Q->rear == Q->front)
{
Q->rear = Q->front = null;
}
else
{
Q->front = Q->front->next;//将front往后移动一位
}
*x = p->data;
free(p);
return 1;
}
int main()
{
linkqueue Q;
int i;
datatype x=0;
QueueInit(&Q); //初始化
for (i = 1; i <= 5; i++)
EnQueue(&Q, i); //入队
while (!QueueEmpty(Q))
{
DeQueue(&Q, &x);
printf("%8d", x);
}
printf("\n");
}
结果如下: