Algorithm 用于在固定时间内执行推送、弹出和出列操作的自定义数据结构

Algorithm 用于在固定时间内执行推送、弹出和出列操作的自定义数据结构,algorithm,data-structures,Algorithm,Data Structures,我在一次采访中问过这个问题。复制它 编写自定义DS,其中Push()、Pop()和Dequeue()操作将在固定时间内完成。 e、 g.输入是1,2,3,4,然后我们调用pop(),应该返回4。如果调用dequeue,则应返回1。O(1)中的所有内容。 我已经回答了,但不确定这是否是最佳的w.r.t.空间复杂性。可以提供它 通过将指针同时指向头部和尾部,您可以高效地实现dequeue()和pop()(O(1)) 大致如下:(假设垃圾收集语言和简化版本,而不是null/empty-safe): 关

我在一次采访中问过这个问题。复制它

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

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

可以提供它

通过将指针同时指向头部和尾部,您可以高效地实现
dequeue()
pop()
O(1)

大致如下:(假设垃圾收集语言和简化版本,而不是null/empty-safe):

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

可以提供它

通过将指针同时指向头部和尾部,您可以高效地实现
dequeue()
pop()
O(1)

大致如下:(假设垃圾收集语言和简化版本,而不是null/empty-safe):

关于空间复杂性:

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

这正是我所回答的。寻找更好的解决方案,如果有的话。@VallabhPatade xor链表?@amit:你不认为你应该更新pop()例程中的last=last.previous吗?@amit:我也不能想出比这更有效的解决方案。让我们假设这是这个问题的最佳解决方案。@VallabhPatade:您可能可以使用动态循环数组。您可以确保
空格正是我所回答的。寻找更好的解决方案,如果有的话。@VallabhPatade xor链表?@amit:你不认为你应该更新pop()例程中的last=last.previous吗?@amit:我也不能想出比这更有效的解决方案。让我们假设这是这个问题的最佳解决方案。@VallabhPatade:您可能可以使用动态循环数组。您可以确保
空格
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