C语言问题
设循环队列的存储空间为Q(1:3),初始状态为front=rear=30。现经过一系列入队与退队运算后,front=16,rear=15,则循环队列中有()个元素。答案为...
设循环队列的存储空间为Q(1:3),初始状态为front=rear=30。现经过一系列入队与退队运算后,front=16,rear=15,则循环队列中有( )个元素。
答案为29求详解 展开
答案为29求详解 展开
3个回答
展开全部
循环队列的几个公式给你总结下:
对头指针+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。
对头指针+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。
展开全部
你这个循环队列是无法放满30个元素的,因为无法区分front=rear时是空了还是满了!故只能放少一个元素,当front==(rear+1)%30时,循环队列为满,放了29个元素!当front==rear,队列为空!
计算循环队列中有几个元素可使用
rear+(rear>=front?30:0)-front
计算循环队列中有几个元素可使用
rear+(rear>=front?30:0)-front
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这是个循环队列问题
有个总结的公式,如果front>rear,则有rear-front+max个元素;(max为存储空间的最大值,此处为30)
如果front<rear,则有rear-front个元素。
有个总结的公式,如果front>rear,则有rear-front+max个元素;(max为存储空间的最大值,此处为30)
如果front<rear,则有rear-front个元素。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询