用队列实现栈python(leetcode225)

#225. 用队列实现栈

使用两个队列实现一个后入先出(LIFO)的栈,并支持普通栈的全部四种操作(push、top、pop 和 empty)。

'''

class MyStack:

    """

    python使用双向队列deque实现栈,普通的queue没有类似peek的功能,实现top比较复杂

    双向队列中有append和appendleft分别是向右添加和向左添加元素,

    pop和popleft分别指向最右和最左的元素

    使用append和popleft就是队列的操作

    """

    def __init__(self):

        # 两个队列实现栈

        self.queue_in = deque()

        self.queue_out = deque()

    def push(self, x: int) -> None:

        self.queue_in.append(x)

    def pop(self) -> int:

        # 不同于使用两个栈实现队列,如果将queue_in的所有元素用popleft和append移动到queue_out,顺序和之前保持不变

        # popleft将queue_in队列先入的元素弹出,直到剩余最后一个,就是栈的pop需要找的弹出的最后一个进入的元素

        # queue_in队列中最后一个元素之前的元素先进入queue_out,再回到queue_in

        for i in range(len(self.queue_in) - 1):

            self.queue_out.append(self.queue_in.popleft())

        res = self.queue_in.popleft()

        self.queue_in, self.queue_out = self.queue_out, self.queue_in

        return res

    def top(self) -> int:

        # 栈的top是返回最后一个输入的元素

        # 即返回队列的最后一个元素

        return self.queue_in[-1]

    def empty(self) -> bool:

        # 只有queue_in存放数据

        return not self.queue_in       

# Your MyStack object will be instantiated and called as such:

# obj = MyStack()

# obj.push(x)

# param_2 = obj.pop()

# param_3 = obj.top()

# param_4 = obj.empty()

'''

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 基本概念 1.栈(stacks)是一种只能通过访问其一端来实现数据存储与检索的线性数据结构,具有后进先出(last...
    DraculaWong阅读 465评论 1 0
  • 用栈实现队列 题目 使用栈实现队列的下列操作: push(x) -- 将一个元素放入队列的尾部。 pop() --...
    SunnyQjm阅读 169评论 0 2
  • 关于我一个有思想的程序猿,终身学习实践者,目前在一个创业团队任team lead,技术栈涉及Android、Pyt...
    GoT阳仔阅读 492评论 0 0
  • 栈和队列的特性 .栈(stacks)是一种只能通过访问其一端来实现数据存储与检索的线性数据结构,具有后进先出(la...
    锄禾日当阅读 4,883评论 0 0
  • 队列在现实生活中非常常见。 比如去一些餐厅吃饭是需要排队的,先来的先吃,这就是一个等待的队列。 队列是先到先出的,...
    薪火_阅读 856评论 0 1