循环队列(C语言简单实现)

循环队列

定义

把队列中,头尾相接的顺序存储结构成为循环队列

循环队列存在的问题:当空队列时,front 等于 rear;当队列满时,front 等于 rear,那么如何才能判断队列是满还是空?

解决

  • 当队列空时,条件就是front=rear;
  • 当队列满时,保留一个元素空间。即当队列满时,数组中还有一个空闲单元。

假设队列的最大尺寸为QueueSize,那么队列满的条件就是:(rear+1)%QueueSize == front;

队列的长度计算公式:(rear-front+QueueSize)%QueueSize,当rear>front时,队列长度为QueueSize= rear-front;当rear<front时,QueueSize= (QueueSize-front)+(rear);

简单实现

#include <stdio.h>
#include <stdbool.h>
#define OK 1
#define ERROR 0
#define MAXSIZE 100

typedef int Status;
typedef int QElemType;
/* 循环队列的顺序存储结构 */
struct SqQueue{
   
	QElemType data[MAXSIZE];
	int front;	//头指针
	int rear;	//尾指针,指向队尾元素的下一个位置 
};

/* 初始化一个空队列Q */
Status InitQueue(SqQueue* Q){
   
	Q->front = 0;
	Q->rear = 0;
	return OK;
}

/* 队列长度 */
int QueueLength(SqQueue* Q){
   
	return (Q->rear+MAXSIZE-Q->front)%MAXSIZE;
}

/* 判断队列是否满 */
bool FullQueue(SqQueue* Q){
   
	if((Q->rear+1)%MAXSIZE == Q->front)	//判断是否队满 
		return true;
	return false;
}

/* 判断队列是否空 */
bool EmptyQueue(SqQueue* Q){
   
	if(Q->front == Q->rear)
		return true;
	return false;
}

/* 若队列未满,则插入元素e为Q的队尾元素 */
Statu
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值