循环队列的原理及其代码实现

循环队列是一种空间确定的数据结构,属于线性结构的优化形式。

队列的数据结构为一端进,一端出的形式,即先进先出(FIFO)。

循环队列原理

循环队列主要由一个定长的数组和两个整型记录队列首尾位置的下标。

由队列一端的位置入队时,需要判断队列是否为空,同理由队列另一端出队时,需要判断队列是否为满。

循环队列的主要操作如下:

1.判断队空

循环队列判断是否为空的方式为:队首的下标与队尾的下标是否重合。

2.判断队满

循环队列判断是否为满的方式为:队尾的下标的下一位是否为队首的下标。

即(队尾下标+1)%队列总长=队首下标。

3.入队

入队时先要判断队列是否为满,若为满则无法入队,入队时将队首下标前移一位。

4.出队

出队时先要判断队列是否为空,若为空则无法出队,出队时将队尾下标前移一位。

具体代码实现

结构体

#define MAXSIZE 5

typedef struct Queue {
	int front;
	int rear;
	int data[MAXSIZE];
}Queue;

data为数组,长度为MAXSIZE(本文中为5)。

front为队尾下标,rear为队首下标。

初始化

Queue* initqueue()
{
	Queue* q = (Queue*)malloc(sizeof(Queue));
	q->front = 0;
	q->rear = 0;
	return q;
}

判断队空

int isempty(Queue* q)
{
	if (q->rear == q->front)
	{
		return 1;
	}
	else
	{
		return 0;
	}
}

判断队满

int isfull(Queue* q)
{
	if ((q->rear + 1) % MAXSIZE == q->front)
	{
		return 1;
	}
	else
	{
		return 0;
	}
}

入队

void inqueue(Queue* q, int data)
{
	if (isfull(q))
	{
		return;
	}
	else
	{
		q->data[q->rear] = data;
		q->rear = (q->rear + 1) % MAXSIZE;
	}
}

出队

void outqueue(Queue* q)
{
	if (isempty(q))
	{
		return;
	}
	else
	{
		q->front = (q->front + 1) % MAXSIZE;
	}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值