现在的位置: 首页 > 综合 > 正文

循环队列的基本函数操作

2013年03月02日 ⁄ 综合 ⁄ 共 2728字 ⁄ 字号 评论关闭

/***********************************************************************
  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>

#define MAXQSIZE 10 //最大队列长度
#define FALSE  0
#define TRUE  1

typedef int Status;
typedef int     QElemType; 

typedef struct
{
 QElemType *base;
 int  front;
 int  rear;
} SqQueue;

Status InitQueue(SqQueue &);
Status QueueLength(SqQueue);
Status EnQueue(SqQueue &, QElemType);
Status DeQueue(SqQueue &, QElemType &);

void main( void )
{
 SqQueue  queue;
 QElemType element;
 
 int  client;
 int  length;

 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
//
///////////////////////////////////////////////////////////////////////
Status QueueLength(SqQueue queue)
{
 return ( queue.rear - queue.front + MAXQSIZE) % MAXQSIZE;
}

///////////////////////////////////////////////////////////////////////
//
// 函数名       : EnQueue
// 功能描述     : 插入元素到队列
// 参数         : SqQueue &queue
// 参数         : QElemType element
// 返回值       : Status
//
///////////////////////////////////////////////////////////////////////
Status EnQueue(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;
}

抱歉!评论已关闭.