【问题标题】:What's the difference between a deque and circular buffer?双端队列和循环缓冲区有什么区别?
【发布时间】:2020-06-23 20:54:01
【问题描述】:

对于我缺乏数据结构教育,我提前道歉。

据我了解:

  • 用作内存的固定大小的双端队列可以替换其最旧的值(尽管我们删除了新值)

  • 用作内存的循环缓冲区也可以替换其最旧的值

这两个概念有什么区别?它们是一样的吗?一个是另一个的子集吗?

【问题讨论】:

  • 在标题中你只说“双端队列”,在正文中你突然说“固定大小的双端队列”。是哪一个?

标签: python algorithm data-structures buffer deque


【解决方案1】:

一个很好的相关问题是这个问题:队列和带有尾指针的链表有什么区别?队列添加到末尾并从前面删除,这与您可以使用带有尾指针的链表执行相同的操作。

不同之处在于其中之一是抽象,而其中之一是实现该抽象的具体方式。有几种方法可以实现队列,包括带有尾指针的链表、循环缓冲区,甚至是展开树。同样,您可以对带有尾指针的链表做一些您不会对双端队列做的事情,例如将大段拼接到列表中或从列表中拼接出来。

在您的情况下,“deque”是抽象。您可以将双端队列视为“可以从两端添加和删除的东西”,它可以使用循环缓冲区、链表或展开树等来实现。循环缓冲区是多种方式之一你可以实现一个双端队列,除了实现一个双端队列之外,你还可以用循环缓冲区做其他事情。

希望这会有所帮助!

【讨论】:

    【解决方案2】:

    双端队列是abstract data type,因为它是由你可以用它做什么来定义的;它支持什么操作。您可以在双端队列的任一端添加和删除元素。

    循环缓冲区是data structure,因为它由它在内存中的表示方式以及应如何操作其状态以完成双端队列操作来定义。

    两者的关系是循环缓冲区是双端队列的implementation

    【讨论】:

      猜你喜欢
      • 2015-11-13
      • 2014-09-18
      • 1970-01-01
      • 1970-01-01
      • 2017-04-14
      • 2014-10-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多