双端队列和循环缓冲区有什么区别?
What's the difference between a deque and circular buffer?
对于我缺乏数据结构教育,我提前表示歉意。
据我了解:
用作内存的固定大小的双端队列可以替换其最旧的值(尽管我们会删除新值)
用作内存的循环缓冲区也可以替换其最旧的值
这两个概念有什么区别?它们是一样的吗?一个是另一个的子集吗?
一个很好的相关问题是这个:队列和带有尾指针的链表有什么区别?队列添加到末尾并从前面删除,这与使用尾指针的链表可以做的事情相同。
区别在于其中之一是抽象,而其中之一是实现该抽象的具体方法。有几种方法可以实现队列,包括带有尾指针的链表、循环缓冲区,甚至是伸展树。类似地,您可以对带有尾指针的链表做一些您不会对双端队列做的事情,例如将大的部分拼接到列表中或从列表中拼接出来。
在您的例子中,"deque" 是抽象。您可以将双端队列视为 "something where you can add and remove from both ends,",它可以用循环缓冲区、链表或伸展树等来实现。循环缓冲区是您可以实现双端队列的多种方式之一,并且有除了实现双端队列之外,您还可以使用循环缓冲区做其他事情。
希望对您有所帮助!
双端队列是 abstract data type,因为它是由您可以用它做什么来定义的;它支持什么操作。您可以在双端队列的任一端添加和删除元素。
循环缓冲区是 data structure,因为它定义了它在内存中的表示方式,以及应如何操纵其状态来完成双端队列操作。
两者之间的关系是循环缓冲区是双端队列的implementation。
对于我缺乏数据结构教育,我提前表示歉意。
据我了解:
用作内存的固定大小的双端队列可以替换其最旧的值(尽管我们会删除新值)
用作内存的循环缓冲区也可以替换其最旧的值
这两个概念有什么区别?它们是一样的吗?一个是另一个的子集吗?
一个很好的相关问题是这个:队列和带有尾指针的链表有什么区别?队列添加到末尾并从前面删除,这与使用尾指针的链表可以做的事情相同。
区别在于其中之一是抽象,而其中之一是实现该抽象的具体方法。有几种方法可以实现队列,包括带有尾指针的链表、循环缓冲区,甚至是伸展树。类似地,您可以对带有尾指针的链表做一些您不会对双端队列做的事情,例如将大的部分拼接到列表中或从列表中拼接出来。
在您的例子中,"deque" 是抽象。您可以将双端队列视为 "something where you can add and remove from both ends,",它可以用循环缓冲区、链表或伸展树等来实现。循环缓冲区是您可以实现双端队列的多种方式之一,并且有除了实现双端队列之外,您还可以使用循环缓冲区做其他事情。
希望对您有所帮助!
双端队列是 abstract data type,因为它是由您可以用它做什么来定义的;它支持什么操作。您可以在双端队列的任一端添加和删除元素。
循环缓冲区是 data structure,因为它定义了它在内存中的表示方式,以及应如何操纵其状态来完成双端队列操作。
两者之间的关系是循环缓冲区是双端队列的implementation。