【发布时间】:2019-07-28 10:26:40
【问题描述】:
队列是一种数据结构,我们从一端(前)插入元素,从另一端(后)删除元素。但是使用双端队列我们可以从两端插入和删除,那么这是否违反了队列的属性?
【问题讨论】:
-
这样说;叉子可以用作勺子,也可以用作叉子。可用作勺子并不“违反叉子的特性”,因为没有对叉子的合理定义要求叉子也不能用作勺子。
队列是一种数据结构,我们从一端(前)插入元素,从另一端(后)删除元素。但是使用双端队列我们可以从两端插入和删除,那么这是否违反了队列的属性?
【问题讨论】:
queue 不是属性。它是一个抽象的数据类,包含 push_right() 和 pop_left() 操作。
同样,deque 是一个抽象数据类,它具有操作 push_left()、push_right()、pop_left () 和 pop_right()。
这表明双端队列操作是队列操作的超集。
因此,队列可以用双端队列来实现。 IIRC,这就是 C++ 所做的。
由于队列可以用双端队列实现,因此说双端队列违反队列属性是没有意义的。更准确地说,双端队列提供了额外的功能。
希望这有助于澄清情况:-)
【讨论】:
不,deque 不会取消队列属性。
根据wiki:
在计算机科学中,双端队列(缩写为 deque)是一种抽象数据类型,它概括队列,可以在队列的前端(头部)添加或删除元素或后退(尾)
所以很明显,deque 是队列的泛化而不是违规。
【讨论】: