dav*_*419 0 queue data-structures
循环队列显然更好,因为它可以帮助我们利用弹出元素留下的空白空间。它还节省了每次弹出后可能用于横向移动元素的时间。
但是是否存在队列比使用循环队列更受青睐的用例?
队列的定义 = 我们将采用线性数组实现。遵循 FIFO,无覆盖
循环队列的定义=环形缓冲区实现。遵循先进先出。没有覆盖。
注意:在许多语言中,aqueue只是一个接口,并没有说明任何有关实现的信息。
当使用基于数组的循环队列(也称为环形缓冲区)时,您必须处理推送到已满缓冲区的情况。你可以:
这些选项都有缺点。如果您可以忍受它们,或者您知道您永远不会填充缓冲区,那么环形缓冲区就是您的最佳选择。
选项 3 和 4 会导致口吃。根据您的用例,您可能更喜欢更长但稳定的访问时间和可靠性,而不是偶尔的峰值,因此选择 alinked list或某种其他类型的动态实现,例如deque, 。
示例用例是任务,您必须实现稳定的帧/采样率或吞吐量,并且不能容忍卡顿,例如:
然而,基于线性数组的队列也会遇到同样的缺点。我看不出选择线性队列而不是循环队列的理由。
(除了实现复杂性稍高之外。)
std::queue在C++中deque默认使用a作为底层容器。deque本质上是一个动态数组,对于大多数用例来说,它似乎是一个很好的基础,因为它以小块的形式分配内存,因此减少了卡顿。
| 归档时间: |
|
| 查看次数: |
976 次 |
| 最近记录: |