【问题标题】:In deque we can insert and delete at both ends. Does it violate the queue property?在双端队列中,我们可以在两端插入和删除。它是否违反队列属性?
【发布时间】:2019-07-28 10:26:40
【问题描述】:

队列是一种数据结构,我们从一端(前)插入元素,从另一端(后)删除元素。但是使用双端队列我们可以从两端插入和删除,那么这是否违反了队列的属性?

【问题讨论】:

  • 这样说;叉子可以用作勺子,也可以用作叉子。可用作勺子并不“违反叉子的特性”,因为没有对叉子的合理定义要求叉子也不能用作勺子。

标签: queue deque


【解决方案1】:

queue 不是属性。它是一个抽象的数据类,包含 push_right()pop_left() 操作。

同样,deque 是一个抽象数据类,它具有操作 push_left()push_right()pop_left ()pop_right()

这表明双端队列操作是队列操作的超集。

因此,队列可以用双端队列来实现。 IIRC,这就是 C++ 所做的。

由于队列可以用双端队列实现,因此说双端队列违反队列属性是没有意义的。更准确地说,双端队列提供了额外的功能。

希望这有助于澄清情况:-)

【讨论】:

    【解决方案2】:

    不,deque 不会取消队列属性。

    根据wiki

    在计算机科学中,双端队列(缩写为 deque)是一种抽象数据类型,它概括队列,可以在队列的前端(头部)添加或删除元素或后退(尾)

    所以很明显,deque 是队列的泛化而不是违规。

    【讨论】:

    • 感谢您的回答。但是,如果我从一端(后端)插入元素并从同一端(后端)删除元素,那么 STACK 和 Dqueue 有什么区别。
    • @Abhishek kumar 你能在栈顶以外的地方插入和删除吗?你不能。如果一种功能方式与其他方式匹配,这并不意味着两种数据结构相同。
    猜你喜欢
    • 2012-07-27
    • 2016-01-19
    • 2018-07-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-29
    • 2014-04-13
    相关资源
    最近更新 更多