python数据结构与算法--使用堆栈模拟队列

问题:

  • 队列的插入和删除遵循先入先出的原则,而堆栈遵循后进先出的原则。
  • 用两个堆栈模拟队列,要求实现时不能分配超过O(1)的内存,时间复杂度必须是o(m)。

思路:

  • 用两个堆栈模拟队列,必须要支持两种操作,enqueue和dequeue,前者在队列末尾加入一个元素,后者把队列头部的元素取出。
  • 步骤一:通过enqueue连续将“12345”插入队列,这5个数在堆栈A中的排列是“12345”,即1在底部,5在顶部。
  • 步骤二:调用dequeue操作将1取出,即将A中元素依次弹出,压入堆栈B,于是堆栈B队列中为“54321”,也就是5在底部,1在顶部,于是直接把B的顶部元素弹出即可。
class StackQueue:
    def __init__(self):
        self.stackA = []
        self.stackB = []

    def enqueue(self,v):
        self.stackA.append(v)

    def dequeue(self):
        if len(self.stackB) == 0 :
            while len(self.stackA) > 0 :
                self.stackB.append(self.stackA.pop())
        return self.stackB.pop()


sq = StackQueue()

print("enqueue:")
for i in range(6):
    sq.enqueue(i)
    print("{0}".format(i), end="")

print("\ndequeue:")
for i in range(6):
    print("{0}".format(sq.dequeue()), end="")

运行结果:

enqueue:
012345
dequeue:
012345

你可能感兴趣的:(数据结构与算法)