Data structures 队列优于循环队列的任何用例?

Data structures 队列优于循环队列的任何用例?,data-structures,queue,Data Structures,Queue,循环队列显然更好,因为它帮助我们使用弹出元素所留下的空白空间。它还节省了每次pop后用于元素横向移动的时间 但是,有没有比使用循环队列更适合使用队列的用例呢 队列定义=我们将使用线性阵列实现。遵循FIFO且无覆盖 循环队列的定义=环形缓冲区实现。跟随先进先出。没有覆盖 注意:在许多语言中,队列只是一个接口,没有说明任何有关实现的内容 当使用基于数组的循环队列(也称为环形缓冲区)时,必须处理推送到完全缓冲区的情况。你可以: 忽略插入 覆盖最早的条目 阻塞,直到有空间为止 (重新)分配内存并复制所

循环队列显然更好,因为它帮助我们使用弹出元素所留下的空白空间。它还节省了每次pop后用于元素横向移动的时间

但是,有没有比使用循环队列更适合使用队列的用例呢

队列定义=我们将使用线性阵列实现。遵循FIFO且无覆盖

循环队列的定义=环形缓冲区实现。跟随先进先出。没有覆盖

注意:在许多语言中,
队列
只是一个接口,没有说明任何有关实现的内容

当使用基于数组的循环队列(也称为环形缓冲区)时,必须处理推送到完全缓冲区的情况。你可以:

  • 忽略插入
  • 覆盖最早的条目
  • 阻塞,直到有空间为止
  • (重新)分配内存并复制所有内容
  • 使用过大的缓冲区,这样就不会发生这种情况
  • 每种选择都有缺点。如果你能和他们生活在一起,或者你知道你永远不会填满缓冲区,那么环形缓冲区就是一条出路

    选项3和4会导致口吃。根据您的用例,您可能更喜欢更长但稳定的访问时间和可靠性,而不是偶尔出现的峰值,因此选择
    链表
    或其他类型的动态实现,例如
    deque

    示例用例是任务,您必须实现稳定的帧/采样率或吞吐量,并且不能容忍口吃,例如:

    • 实时视频和音频处理
    • 实时渲染
    • 联网
    • 在推送新作业时,如果不希望线程阻塞太长时间,则为线程池
    但是,基于线性阵列的队列也会受到同样的不利影响。我认为没有理由选择线性队列而不是循环队列。
    (除了略高的实现复杂性之外。)

    <>代码> STD: C++中的队列默认使用<代码> DEQu< /COD>作为底层容器。code>deque本质上是一个动态数组,对于大多数用例来说,它似乎是一个很好的基础,因为它将内存分配成小块,从而减少了口吃。

    注意:在许多语言中,
    队列
    只是一个接口,没有说明任何实现

    当使用基于数组的循环队列(也称为环形缓冲区)时,必须处理推送到完全缓冲区的情况。你可以:

  • 忽略插入
  • 覆盖最早的条目
  • 阻塞,直到有空间为止
  • (重新)分配内存并复制所有内容
  • 使用过大的缓冲区,这样就不会发生这种情况
  • 每种选择都有缺点。如果你能和他们生活在一起,或者你知道你永远不会填满缓冲区,那么环形缓冲区就是一条出路

    选项3和4会导致口吃。根据您的用例,您可能更喜欢更长但稳定的访问时间和可靠性,而不是偶尔出现的峰值,因此选择
    链表
    或其他类型的动态实现,例如
    deque

    示例用例是任务,您必须实现稳定的帧/采样率或吞吐量,并且不能容忍口吃,例如:

    • 实时视频和音频处理
    • 实时渲染
    • 联网
    • 在推送新作业时,如果不希望线程阻塞太长时间,则为线程池
    但是,基于线性阵列的队列也会受到同样的不利影响。我认为没有理由选择线性队列而不是循环队列。
    (除了略高的实现复杂性之外。)


    <>代码> STD: C++中的队列默认使用<代码> DEQu< /COD>作为底层容器。code>deque本质上是一个动态数组,它似乎是大多数用例的良好基础,因为它将内存分配为小块,因此减少了口吃。

    很抱歉没有定义数据结构。我已经编辑了这个问题。你能提供一个实际的用例吗?很抱歉没有定义数据结构。我已经编辑了这个问题。你能提供一个同样的实际用例吗?循环队列并不是在所有情况下都“明显更好”。特别是,如果您需要一个无界队列,那么这是一个糟糕的选择,因为当项目数超过预先分配的大小时,您最终不得不重新分配,而当项目数减少时,阵列前端就有未使用的空间。链表是实现无界队列的更好方法。在本例中,我们使用数组实现,因此两者都是有界的。循环队列并非在所有情况下都“明显更好”。特别是,如果您需要一个无界队列,那么这是一个糟糕的选择,因为当项目数超过预先分配的大小时,您最终不得不重新分配,而当项目数减少时,阵列前端就有未使用的空间。链表可以更好地实现无界队列。在本例中,我们使用数组实现,因此两者都是有界的。