C语言问题

设循环队列的存储空间为Q(1:3),初始状态为front=rear=30。现经过一系列入队与退队运算后,front=16,rear=15,则循环队列中有()个元素。答案为... 设循环队列的存储空间为Q(1:3),初始状态为front=rear=30。现经过一系列入队与退队运算后,front=16,rear=15,则循环队列中有( )个元素。
答案为29求详解
展开
 我来答
an0011121
推荐于2017-12-16 · TA获得超过1.1万个赞
知道大有可为答主
回答量:3948
采纳率:55%
帮助的人:2349万
展开全部
循环队列的几个公式给你总结下:
对头指针+1:Q.front=(Q.front+1)%MAXSIZE
队尾指针+1:Q.reae=(Q.rear+1)%MAXSIZE
初始化:Q.front=Q.rear=0
队空:Q.front=Q.rear
队满:(Q.rear+1)%MAXSIZE=Q.front
求长度:(Q.rear-Q.front+MAXSIZE)%MAXSIZE

%MAXSIZE是为了防止越界,比如一共30个位置,队尾指到30了,如果+1就到31了,这时候再取模30就得1,那么队尾指到的30向后+1就到了1了,循环回来了。
题目中,容量也就是MAXSIZE=30。
由上述倒数第二个共识式子(Q.rear+1)%MAXSIZE=Q.front得出(15+1)%30=16指到队列已经满了。
区分队满与对空的条件,队满是头尾指针差一个,也就是队尾指针当前位置如果再后移一个就等于对头了。满的情况下,最大容量是比MAXSIZE少1的。
也就是29,也就是你的题的答案。
或者你用求长度的公式来算一下,(15-16+30)%30答案也是29。
ansenyou
2013-02-12 · TA获得超过2.4万个赞
知道大有可为答主
回答量:1.1万
采纳率:8%
帮助的人:7931万
展开全部
你这个循环队列是无法放满30个元素的,因为无法区分front=rear时是空了还是满了!故只能放少一个元素,当front==(rear+1)%30时,循环队列为满,放了29个元素!当front==rear,队列为空!
计算循环队列中有几个元素可使用
rear+(rear>=front?30:0)-front
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
lfq6785676
2013-02-12 · TA获得超过324个赞
知道小有建树答主
回答量:271
采纳率:0%
帮助的人:171万
展开全部
这是个循环队列问题
有个总结的公式,如果front>rear,则有rear-front+max个元素;(max为存储空间的最大值,此处为30)
如果front<rear,则有rear-front个元素。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式