循环队列的基本函数操作

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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值