循环队列的一些问题总结,入队、出队操作

本文总结了在复习数据结构中遇到的循环队列问题,特别是关于rear指针是否指向队尾元素还是下一个位置的困惑。通过代码示例展示了错误理解导致的乱码问题,并给出了修正后的代码。同时,详细阐述了循环队列满、空的判断条件,以及入队、出队操作,帮助理解循环队列的工作原理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在复习数据结构——队列这一节时遇到了一些问题,现总结如下,以便以后查阅:

  1. 在队列的顺序存储方式里,为了避免存储空间的“假溢出”,充分利用存储空间,我们用了一种实现方式,即循环队列。

来源于百度百科

(1). 图中有两个指针(只是两个整型变量,因为在这里有指示作用,所以理解为指针) front、rear,一个指示队头,一个指示队尾(这里注意:rear定义为指向队尾元素还是队尾元素的下一个空间)。

(2). rear和front互相追赶着,这个追赶过程就是队列添加和删除的过程,如果rear追到head说明队列满了,如果front追到rear说明队列为空。

如此一来,将出队的剩余的空间给予入队,满足了有限空间里的利用率要求。这些都是显而易见的。

  1. 第二点是由第一点那个rear指针发散的。实在是网上的博客资料太多,不同的书本里又说法不一。比如,老师上课说的是rear指针是指向队尾元素的,但我的一本书上却是指向队尾元素的下一个位置。我对照着写代码于是就出现了这样的问题:
    在这里插入图片描述
    在这里插入图片描述
    两个乱码,分别出现在第一个入队元素和第一个出队元素上。当时看到就很烦,或许是当时大脑宕机,没有找出啥问题。第二天才发现是我rear指针的概念理解错了。贴一下改之前代码:
Status EnQueue(Queue *Q, ElemType e){  //入队操作
	if(!Q->sp
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值