Python编程题34--用队列实现栈

2021-12-06  本文已影响0人  wintests

题目

栈和队列是常见的数据结构,队列的特点是 先进先出,而栈的特点是 先进后出

请使用 队列 模拟实现栈的下列操作:

说明

  • 可以用 列表list 来模拟队列,但只允许使用队列的基本操作。
  • 假设每次调用 pop 和 top 都能保证栈不为空。

实现思路

代码实现

class MyStack:

    def __init__(self):
        self.queue1 = []  # 实际队列
        self.queue2 = []  # 临时队列

    def push(self, x):
        self.queue1.append(x)

    def pop(self):
        while len(self.queue1) > 1:
            self.queue2.append(self.queue1.pop(0))
        res = self.queue1.pop(0)
        while self.queue2:
            self.queue1.append(self.queue2.pop(0))
        return res

    def top(self):
        res = self.pop()
        self.queue1.append(res)
        return res

    def empty(self):
        return self.queue1 == []

上面方法使用了两个队列来实现,那么如果限制只能使用一个队列的话,又该要如何优化实现呢?

其实并不难,我们只需在模拟出栈操作时,将队头的元素(除了最后一个元素外),依次执行出队操作,并重新添加到队尾,这样一来只需要使用一个队列即可实现栈的操作。

优化后的代码实现

class MyStack:

    def __init__(self):
        self.queue1 = []

    def push(self, x):
        self.queue1.append(x)

    def pop(self):
        len1 = len(self.queue1)
        while len1 > 1:
            self.queue1.append(self.queue1.pop(0))
            len1 -= 1
        return self.queue1.pop(0)

    def top(self):
        res = self.pop()
        self.queue1.append(res)
        return res

    def empty(self):
        return self.queue1 == []

更多Python编程题,等你来挑战:Python编程题汇总(持续更新中……)

上一篇 下一篇

猜你喜欢

热点阅读