常量时间中Push,Pop和Dequeue操作的自定义数据结构

时间:2013-01-09 10:03:17

标签: algorithm data-structures

我在一次采访中问过这个问题。再现它。

编写自定义DS,其中Push(),Pop()和Dequeue()操作将在恒定时间内完成。 例如输入是1,2,3,4然后我们调用pop(),应该返回4。如果我们调用dequeue,则应返回1。 O(1)中的所有内容。

我已经回答了,但不确定那是否最好w.r.t.空间复杂性。

1 个答案:

答案 0 :(得分:6)

doubly Linked List可以提供。

通过指向头部和尾部的指针,您可以有效地实现dequeue()pop()O(1))。

以下内容:(假设垃圾收集语言,简化版本,非空/空安全):

push(e):
  n = new Node(e)
  last.next = n
  n.previous = last
  last = n       
pop():
  e = last.value
  last.previous.next = null
  last = last.previous
  return e
dequeue():
  e = head.value
  head = head.next
  head.previous = null
  return e

关于空间复杂性:
解决方案是Theta(n)空间,很容易看出任何子线性解决方案都无法存储所有数据 - 并且在某些情况下会失败。