Q
排队方法
0
A
回答
1
想象发生什么的一种方法是想象一个时钟(通常用作模块算术的类比,这种情况发生在您使用%运算符提到的行中)。
例如,假设CircularArrayQueue
当前的大小为4,长度为5(索引0-4)。在下面的例子中,后的电流值是4(索引4)
内部数组中的项目可能是这样的:
INDEX | 0 | 1 | 2 | 3 | 4 |
VALUE | | 8 | 9 | 2 | 1 |
^
|
Rear
现在,让我们说,您将值7成CircularArrayQueue
,那么行
rear = (rear + 1) % queue.length;
将被执行。这有效地计算如下:
add 1 to rear (4) -> 5
divide by queue.length (5) -> 5/5 = 1 (remainder of 0)
take the remainder of the previous division (0) and set it equal to rear
INDEX | 0 | 1 | 2 | 3 | 4 |
VALUE | 7 | 8 | 9 | 2 | 1 |
^
|
Rear
所以后所有这些步骤,后部现在等于0并指向CircularArrayQueue
的内部阵列中的第一个索引。当数组到达最后时,索引“回绕”数组的这种行为是CircularArrayQueue
特征的循环行为。
,这涉及一种时钟的方式,是在一个时钟总是分针“绕回”,当它到达60,和“复位”回0
换句话说,内部数组作为上面的例子,可以被认为只有5分钟(索引0 - 4)的时钟。你可以认为(后+ 1)在时钟上前进一分钟。在“分针”(后)增加了4次之后,它从0开始。
0
rear = (rear+1) % queue.length;
达到循环。由于CircularArrayQueue
类名称暗示它是循环的。这意味着当到达最后一个元素(queue.length
-th)时,它开始从头开始插入元素。 rear = (rear+1) % queue.length
在rear+1 < queue.length
的情况下返回rear+1
,如果rear+1 == queue.length
的值为0,并且在这种情况下它开始从数组的开始插入元素。
0
它基本上为您的队列索引四舍五入循环队列。
可以说你的数组queue.length == 10,所以当后增加到10时,它将舍入为0以在0索引处插入下一个元素。
相关问题
- 1. 更好的方法来排队报告
- 2. 如何在java中排队方法
- 3. ThreadPool上的方法如何排队
- 4. 简单的方法把UIButtons排队?
- 5. 为什么排队的返回值:前()队列:: pop()方法
- 6. 排队方法,当队列已满时增加数组大小
- 7. 队列实现,排队方法不起作用
- 8. 使用Scala中的数组实现队列排队的方法
- 9. 正在使用performSelector:afterDelay:排队或排序方法的最有效方法?
- 10. Ruby:立即排队排队
- 11. WP排队方法无法加载自定义脚本
- 12. 排队方法调用 - 任何想法如何?
- 13. Sidekiq排队工作,不排队他们
- 14. 交易排队/出队
- 15. 排队并发队列
- 16. 排队框架解决方案
- 17. JMS排队的替代方案
- 18. 排队jQuery动画的最佳方式
- 19. ASP.NET MVC排队解决方案
- 20. 快捷方式排队新构建?
- 21. 用delayed_job的排队方法,新的错误
- 22. 排队传递JSON对象作为参数POST方法
- 23. 一个正确的排队和取消asynctasks的方法
- 24. 在Play中排队异步任务! - 正确的方法
- 25. 使用delayed_job在Rails应用程序中从gem排队方法
- 26. 排队系统通知的正确方法?
- 27. 使用参数排队各种方法调用
- 28. 优先级队列方法的字符串排序
- 29. 在自己的线程中排队的方法调用
- 30. 在node.js上为用户排队的一种方法
CircularArrayQueue的大小如何可以为4,长度为5,这有点令人困惑? –
内部数组的长度为5,表示其物理大小为5个元素,但其逻辑大小为4 - 5个可用空间中只有4个被元素占用。 –