【问题标题】:Complexity of linked list/doubly linked list in Stack/Queue?Stack/Queue中链表/双向链表的复杂性?
【发布时间】:2017-03-22 19:39:02
【问题描述】:

在堆栈 (LIFO) 情况下: 如果我在链表中​​使用命令 peek(),复杂度为 0(n)。为什么会这样,因为我只读取了列表的最后一个对象?它应该是0(1)吗? 在队列中(FIFO):如果我在链表中​​使用 peek(),复杂度现在是 0(1)。 为什么会有区别?

感谢您花时间阅读和帮助。

【问题讨论】:

    标签: linked-list stack queue time-complexity big-o


    【解决方案1】:

    您确定这种复杂性吗?访问堆栈的顶部元素是 0(1),所有操作如 push() 和 pop() 都是如此,因为它们与堆栈的大小无关。

    如果您想要访问堆栈的底部,您将得到 0(n)(因为您需要从顶部逐个元素一直向下)。

    你是从哪里得到这种复杂性的?

    【讨论】:

    • 我在学校从老师那里学到了这一点。我已经再次问过他了。他说这是对的。我要求解释,但我不明白。这就是为什么我把它带到这里......
    • 我能想到的唯一解释是 peek() 实际上是一种可以在堆栈中找到任何元素的搜索。在那种情况下,正如我所提到的,当您从顶部开始并逐个元素地线性查看堆栈时,该操作的复杂性将是 O(n)。但是,您应该始终可以直接访问堆栈顶部。这是一篇有趣的帖子,比较了各种结构的操作复杂性:stackoverflow.com/questions/7294634/…
    • 另外,我建议您也检查一下:bigocheatsheet.com 和这里:en.wikipedia.org/wiki/Peek_(data_type_operation) 希望有帮助。
    • 谢谢。我一定会看看那些。
    猜你喜欢
    • 1970-01-01
    • 2012-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-12
    • 2015-04-04
    相关资源
    最近更新 更多