//链队列的初始化及入队出队操作,XP3+VC6.0 运行下通过。
#define OVERFLOW -2
#define ERROR 0
#include <stdio.h>
typedef int QElemType;
typedef struct QNode {
QElemType data;
struct QNode *next;
}QNode,*QueuePtr;
typedef struct {
QueuePtr front; //队头指针
QueuePtr rear; //队尾指针
}LinkQueue;
//初始化队列
void InitQueue(LinkQueue *Q)
{
Q->front=Q->rear=(QueuePtr)malloc(sizeof(QNode));
if (!Q->front) exit(OVERFLOW);
Q->front->next=NULL;
}
//入队列
void EnQueue(LinkQueue *Q,QElemType e)
{
//插入元素e为Q的新的队尾元素
QueuePtr p;
p=(QueuePtr)malloc(sizeof(QNode));
if(!p) exit(OVERFLOW);
p->data=e; p->next=NULL;
Q->rear->next=p;
Q->rear=p;
}
//出队列
void DeQueue(LinkQueue *Q, QElemType *e)
{
//若队列不空则删除Q的头元素,用e返回其值。
QueuePtr p;
if(Q->front==Q->rear) exit(ERROR);
p=Q->front->next;
*e=p->data; // 一定是*e
Q->front->next=p->next;
if(Q->rear==p) Q->rear=Q->front;
free(p);
}
void main()
{
LinkQueue *Q;
QElemType e;
int i;
InitQueue(&Q);
printf("请输入5个整数:");
for(i=0; i<5; i++)
{
scanf("%d",&e);
EnQueue(&Q,e);
}
printf("\n");
printf("输出结果为:");
while (Q->front!=Q->rear)
{
DeQueue(&Q,&e);
printf("%d,",e);
}
printf("\n");
}
运行结果:
请输入5个整数:50 60 80 20 100
输出结果为:50,60,80,20,100