【发布时间】:2017-05-10 00:55:27
【问题描述】:
我正在研究数据结构,对堆栈和队列的不同实现中的时间复杂度有一些疑问。
对于队列,如果一个元素可以在头部或尾部排队,动态数组实现在结束和开始插入的时间为 O(1)。链表实现给出了 O(1) 实现。
对于堆栈,如果可以在列表的开头或末尾添加一个节点,那么单链表和数组实现都会给出 O(1) 的时间复杂度。
我是对的还是我错过了什么?
【问题讨论】:
我正在研究数据结构,对堆栈和队列的不同实现中的时间复杂度有一些疑问。
对于队列,如果一个元素可以在头部或尾部排队,动态数组实现在结束和开始插入的时间为 O(1)。链表实现给出了 O(1) 实现。
对于堆栈,如果可以在列表的开头或末尾添加一个节点,那么单链表和数组实现都会给出 O(1) 的时间复杂度。
我是对的还是我错过了什么?
【问题讨论】:
如果您在下一个插入位置维护索引,则插入操作将花费恒定的时间,因此 O(1) 是正确的。
但是如果没有维护索引,那么我们需要寻找正确的位置来插入新元素,并且插入这个元素所花费的时间会随着数据结构中元素的数量线性增加,所以在这个插入时间情况将是 O(n)
【讨论】: