我想在循环队列和循环单链表之间有明显区别?虽然从一开始,两者看起来几乎相同......循环队列和循环链表
回答
查看结果:http://www.vias.org/cppcourse/chap20_05.html您会注意到循环队列在标准定义中作为数组实现。
那么主要区别究竟是什么? – keerthi 2012-08-08 15:05:37
如果将其作为数组实现,则只需在缓冲区中进行单个查找即可获取所需的元素。否则,如果它是一个列表,则需要逐个节点遍历它以获取所需的元素。这种结构用于资源紧张的环境中,每个CPU周期都计数,而且内存非常有限(所以你不允许缓冲区无限扩展)。 – 2012-08-08 15:31:41
循环队列或循环缓冲区:是一种实现队列的方式。例如,假设您想要使用数组实现队列。你会有你的enqueue()
和dequeue()
方法。
假设底层数组是长度为7的,并且用户入队五个值,所以底层数组中的值如下所示:
head tail
position: | 0 | 1 | 2 | 3 | 4 | 5 | 6 |
value: | 3 | 12 | 5 | 4 | 71 | free | free |
现在用户想要出列的元素,除去值3
从位置0
。作为队列实施者,你必须弄清楚如何处理这个问题。一个基本的解决办法是由一个位置移动的所有值下来,底层数组现在看起来是这样的:
head tail
position: | 0 | 1 | 2 | 3 | 4 | 5 | 6 |
value: | 12 | 5 | 4 | 71 | free | free | free |
,但可能需要复制不必要每次出队什么时候很多值的!避免的方法之一是说,你的头现在的位置是1而不是0,
head tail
position: | 0 | 1 | 2 | 3 | 4 | 5 | 6 |
value: | free | 12 | 5 | 4 | 71 | free | free |
所以现在每次添加你只需将其添加到tail
一个新的元素(并增加tail
位置),并且如果删除元素,则只需移动head
即可。这样你就不必做任何不必要的复制。
一旦tail
到达数组的末端,它将开始回卷到数组的开始处 - 即队列将以“圆形”移动到底层数组上。例如,几个排队,和出队后,对底层数组是这样的:
tail head
position: | 0 | 1 | 2 | 3 | 4 | 5 | 6 |
value: | 91 | free | free | free | 71 | 22 | 8 |
尾巴现在缠到数组的开头。
圆形链表:头部指向尾部的链表。这是一个通用的圆形结构。它可以用来实现一个循环队列/缓冲区,或者它可以用于别的东西。
- 1. 队列和While循环
- 2. 循环队列Python
- 3. 循环链接列表
- 4. 链接列表循环
- 5. while循环链接列表
- 6. 循环XOR链接列表?
- 7. 链接列表(循环)
- 8. 循环链表 - 无限循环
- 9. Bukkit团队循环阵列/列表Java
- 10. PHP + MySQL的循环队列
- 11. C++中的循环队列
- 12. 循环队列Python实现
- 13. beanstalkd上的循环队列
- 14. C#中的循环队列#
- 15. 循环队列实现
- 16. 同步循环队列
- 17. 循环队列理论
- 18. 循环队列大小
- 19. 循环队列的缺点?
- 20. 消息队列循环
- 21. jQuery的循环队列
- 22. 循环链表C
- 23. javascript循环链表
- 24. 循环列表
- 25. 循环表列
- 26. for循环与列表和子列表foreach循环
- 27. Swift 2.2:循环和调度队列
- 28. 具有无限循环和队列
- 29. 链接列表上的无限循环优先级队列
- 30. 通过循环列表循环Java
链表可用于实现循环队列,但循环队列不需要实现为链表。 – oldrinb 2012-08-08 15:02:00