设计循环队列

本文介绍了循环队列(环形队列)的概念,它利用数组实现,队头front指示首元素位置,队尾rear指向最后一个有效元素的下一个位置。当front==rear时,队列为空;当(rear+1)%n==front时,队列已满。文章还探讨了环形队列的判空和判满条件以及相关接口的实现。
摘要由CSDN通过智能技术生成

循环队列,也叫“环形队列”。

它指的是:将队列抽象成一个环形,如果队头前面有空间,我们可以继续使用。环形队列可以用数组、链表实现,以下我们使用数组实现。环形队列的队头front表示第一个入队的元素下标,队尾rear代表最后一个有效元素的下一个位置下标。因此,环形队列判空条件是front==rear,判满的条件是(rear+1)%n==front.n表示数组总大小(n=k+1,k表示有效元素个数)。

以下是环形队列的设计,以及一些接口的实现:

typedef struct
{
	int* queue;
	int front;
	int rear;
	int k;//队列长度

}MyCircleQueue;

void* myCircleQueueCreate(MyCircleQueue* q, int k)//初始化
{
	assert(q);
	q->queue = (int*)malloc(sizeof(int)*(k+1));//注意要多开一个大小,队列长度为k指的是有效元素个数,而rear始终指向的是一个空的位置,所以这个多余的空间是给它留的
	q->k = k;
	q->front = q->rear = 0;
}

int myCircleQueuePush(MyCircleQueue* q, int x)//插入,返回0说明插入失败,返回1说明插入成功
{
	assert(q);
	if ((q->rear
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值