java顺序循环队列最多能容纳60个元素,当front=47,rear=23时,求队列元素个数?

2019-03-25 13:46|来源: 网路

我从网上看到一种做法是用|rear-front+MAX|%MAX,结果是24,那么我想问了这个与直接用|rear-front|有什么区别呢?
感激不尽。。。

问题补充:
ethen 写道
首先,结果是36。(严重怀疑lz数学水平,
其次,当rear>front时,size=rear-front.当rear<front时,size=rear-front+MAXSIZE;所以就有了你找到的那个计算公式(rear-front+MAXSIZE)%MAXSIZE。




狂晕。。。,我把求余都算错了。。。

相关问答

更多
  • java.util.PriorityQueue 这是java自带的,要自己建看它的源码即可
  • 对于这种情况,迭代器不实用。 因为它是一个循环队列,你可以记住你看过的第一件事(不一定完全从循环队列中删除它),并将元素出列/排队,直到找到你要找的东西,或者到达第一个出列的节点。 An iterator would not be practical for this situation. Since it's a circular queue, you can remember the first thing you've seen (not necessarily removing it from th ...
  • 您可以使用O(1)pop(),push()和get_min()来实现堆栈:只将当前最小值与每个元素一起存储。 因此,例如,堆[4,2,5,1] (1上)成为[(4,4), (2,2), (5,2), (1,1)] 。 那么可以使用两个堆栈来实现队列 。 推到一个堆叠,从另一个堆叠; 如果第二个堆栈在弹出期间为空,则将所有元素从第一个堆栈移动到第二个堆栈。 例如,对于pop请求,从第一个堆栈[(4,4), (2,2), (5,2), (1,1)]移动所有元素,第二个堆栈将是[(1,1), (5,1), (2, ...
  • 您的实施存在几个问题: notify()的调用必须来自synchronized块内 您的实现会创建“lingerers” - 一种Java内存泄漏,阻止对象被收集的时间超过应有的时间。 要解决此问题,请将从poll()返回的元素设置为null 。 您不需要使用ArrayList并用null s填充它; 一个普通的Object数组就足够了。 您需要添加转换,但无论如何,无论有没有ArrayList ,它都会存在,所以您不妨将它移动到您的代码中。 你不应该同步this 。 最后一点允许队列的恶意用户通过同 ...
  • 您应该从std :: queue查看标准队列 你有CQueue :: Front(),它返回队列中的第一个元素,然后从该队列中删除它 Passenger firstElement = cQueue.Front(); cQueue.Dequeue(); 然后你的其他队列应该有 cQueue2.addPassenger(firstElement); You should look at the standard queue from std::queue You have CQueue::Front( ...
  • 我怎么能计算队列的大小? 我会用 size = (start - end + mod) % mod; 这假设缓冲区永远不会完全处于容量状态。 alernative是使用没有修改的开始和结束 size = lastWriteIndex - nextReadIndex; 您可以在查找索引时修改这些值。 How could I calculate the size of the queue? I would use size = (start - end + mod) % mod; This assumes ...
  • 要回答这个问题,最好描绘一下数组中的队列是什么样的。 在下面的代码中,我将使用int qh作为队列头并将int qt作为队列尾。 arrayQ是一个布尔数组,用于显示i位上是否有元素。 我们假设我们的数组有一些动态变化。 customerCome()在队列中添加一个元素,customerLeave()将队列减1。 bool[] arrayQ = new bool[256]; int qh = 0; int qt = 0; arrayQ[qt++] = true; while(qh != qt){ if( ...
  • 当i ==后方时,你的循环将不会执行,因为i!=后面是假的。 如果你想循环,做一些像: int i = front; do{ System.out.println(i +":> " + queue[i]); i=(i+1)%Size; }while(i != front) When i == rear, your loop won't execute, because the i != rear is false. If you want to loop around, do someth ...
  • 也许我错过了一些东西,但由于它的队列而不是堆栈,答案很简单: const Item first = q.front(); //getting the first q.pop(); //removing him q.push(first); //adding him back to the queue (which will be in the rear) 只是为了确保你理解: 队列弹出队列中的第一个项目,并将项目推送到后面。 FIFO =先进先出。 Stack弹出列表中的最后一项,并将项目推送到后面。 L ...
  • 1.显示空队列 即使在空队列中删除元素也能很好地工作。 但是,空队列的显示有问题: 当队列为空时, rear均为-1。 for循环以i=front开头,所以i为-1 条件是i != rear + 1; ,这是第一次为真(因为-1 != 0 ),所以循环执行一次打印a[-1] ,这是未定义的行为。 之前是垃圾输出。 2.填充队列 当队列已满时, front是0, rear是capactity-1 。 所以你开始你的for循环,我是0,然后循环并打印出每个元素。 最后一个元素是i , rear是capacity ...