/***********************************************************************
REVISION LOG ENTRY
Revision By: http://blog.csdn.net/hongweijin
Revised on : 2004-10-14 18:05:29
Comments : 循环队列的一般操作
***********************************************************************/
#include <stdio.h>
#include <stdlib.h>
#defineMAXQSIZE 10//最大队列长度
#define FALSE 0
#define TRUE 1
typedef intStatus;
typedef int QElemType;
typedef struct
{
QElemType*base;
intfront;
intrear;
} SqQueue;
StatusInitQueue(SqQueue &);
StatusQueueLength(SqQueue);
StatusEnQueue(SqQueue &, QElemType);
StatusDeQueue(SqQueue &, QElemType &);
void main( void )
{
SqQueuequeue;
QElemTypeelement;
intclient;
intlength;
InitQueue(queue);
for (client = 0; client < 3; client++)
{
scanf("%d", &element);
EnQueue(queue, element);
}
printf("\n");
length = QueueLength(queue);
for (client = 0; client < length; client++ )
{
DeQueue(queue, element);
printf("%d ", element);
}
printf("\n");
while (QueueLength(queue) < MAXQSIZE - 1)
{
scanf("%d", &element);
EnQueue(queue, element);
}
printf("\n");
length = QueueLength(queue);
for (client = 0; client < length; client++ )
{
DeQueue(queue, element);
printf("%d ", element);
}
}
///////////////////////////////////////////////////////////////////////
//
// 函数名 : InitQueue
// 功能描述 : 初始化一个循环队列
// 参数 : SqQueue & queue
// 返回值 : Status
//
///////////////////////////////////////////////////////////////////////
Status InitQueue(SqQueue & queue)
{
queue.base = (QElemType *) malloc(MAXQSIZE * sizeof(QElemType));
if (!queue.base)
return FALSE;
queue.front = queue.rear = 0;
return TRUE;
}
///////////////////////////////////////////////////////////////////////
//
// 函数名 : QueueLength
// 功能描述 : 得到队列的长度
// 参数 : SqQueue queue
// 返回值 : Status
//
///////////////////////////////////////////////////////////////////////
StatusQueueLength(SqQueue queue)
{
return ( queue.rear - queue.front + MAXQSIZE) % MAXQSIZE;
}
///////////////////////////////////////////////////////////////////////
//
// 函数名 : EnQueue
// 功能描述 : 插入元素到队列
// 参数 : SqQueue &queue
// 参数 : QElemType element
// 返回值 : Status
//
///////////////////////////////////////////////////////////////////////
StatusEnQueue(SqQueue &queue, QElemType element)
{
//先判断是不是没满的队列
if ((queue.rear + 1) % MAXQSIZE == queue.front)
return FALSE;
queue.base[queue.rear] = element;
queue.rear = (queue.rear + 1) % MAXQSIZE;
return TRUE;
}
///////////////////////////////////////////////////////////////////////
//
// 函数名 : DeQueue
// 功能描述 : 删除队列的头结点
// 参数 : SqQueue &queue
// 参数 : QElemType &element
// 返回值 : Status
//
///////////////////////////////////////////////////////////////////////
Status DeQueue(SqQueue &queue, QElemType &element)
{
//判断队列是不是空的
if (queue.front == queue.rear)
return FALSE;
element = queue.base[queue.front];
queue.front = (queue.front + 1) % MAXQSIZE;
return TRUE;
}