/**********************************************************************************************
**File: queue.c
@@Author: FreeKing
##Created: Sep 15th 2009
$$Description: 关于队列的操作,创建队列,入,出队列,取队列头,判断队列是否为空,求队列长
清空队列等操作
**********************************************************************************************/
#include <stdio.h>
#include <malloc.h>
typedef struct QNode{
int data;
struct QNode *next;
}QNode,*QueuePtr;
typedef struct
{
QueuePtr front; //对头指针
QueuePtr rear;//对尾指针
}LinkQueue;
//初始化一个队列
int InitQueue(LinkQueue &Q)
{
Q.front = Q.rear = (QueuePtr*)malloc(sizeof(QNode));
if(!Q.front)
exit(-1);
Q.front->next = NULL;
return 0;
}
//销毁一个队列
int DestroyQueue(LinkQueue &Q)
{
while(Q.front)
{
Q.rear = Q.front->next;
free(Q.front);
Q.front = Q.rear;
}
return 0;
}
//插入元素e为Q的新的队尾元素
int EnQueue(LinkQueue &Q, int e)
{
p = (QueuePtr*)malloc(sizeof(QNode));
if(!p)
exit(-1);
p->data = e;
p->next = NULL;
Q.rear->next = p;
Q.rear = p;
return 0;
}
//若队列不为空,则删除Q的对头元素,用e返回其值,
int DeQueue( LinkQueue &Q, int e)
{
if( Q.front == Q.rear)
return -1;
p = Q.front->next;
e = p->data;
Q.front->next = p->next;
if(Q.rear == p)
Q.rear = Q.front;
free(p);
return e;
}