zoukankan      html  css  js  c++  java
  • 225_用队列实现栈

    用队列实现栈

    题目

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

    • push(x) – 元素 x 入栈
    • pop() – 移除栈顶元素
    • top() – 获取栈顶元素
    • empty() – 返回栈是否为空
      注意:
    • 你只能使用队列的基本操作-- 也就是 push to back, peek/pop from front, size, 和 is empty 这些操作是合法的。
    • 你所使用的语言也许不支持队列。 你可以使用 list 或者 deque(双端队列)来模拟一个队列 , 只要是标准的队列操作即可。
    • 你可以假设所有操作都是有效的(例如, 对一个空的栈不会调用 pop 或者 top 操作)。

    思路

    类似两个栈实现队列。queue1用来存放数据,每次入栈就插入queue1索引值为0的地方。queue2为出栈时的辅助队列,将queue1[1:-1]的元素出队然后入队queue2(也就是queue1逆序压入queue2),然后queue1仅剩队首元素,这个时候出队即出栈。

    答案

    class MyStack(object):
        def __init__(self):
            """
            Initialize your data structure here.
            """
            self.queue1 = []
            self.queue2 = []
    
        def push(self, x):
            """
            Push element x onto stack.
            :type x: int
            :rtype: void
            """
            self.queue1.insert(0, x)
    
        def pop(self):
            """
            Removes the element on top of the stack and returns that element.
            :rtype: int
            """
            for _ in range(len(self.queue1) - 1):
                self.queue2.insert(0, self.queue1.pop())
            res = self.queue1.pop()
            self.queue1 = self.queue2
            self.queue2 = []
            return res
    
        def top(self):
            """
            Get the top element.
            :rtype: int
            """
            self.queue2 = self.queue1[:]
            for i in range(len(self.queue1) - 1):
                self.queue1.pop()
            res = self.queue1[-1]
            self.queue1 = self.queue2
            self.queue2 = []
            return res
    
        def empty(self):
            """
            Returns whether the stack is empty.
            :rtype: bool
            """
            if len(self.queue1) == 0:
                return True
            return False
    
    欢迎,关注我的公众号 “DailyProgrammer”,每天8点为你推送精彩的技术文章!!!
  • 相关阅读:
    开发工具 内存,性能检测工具
    数据结构 二分法查找
    C语言 goto语句
    C语言 结构体中的零长度数组
    C语言 结构体(联合体)对齐规则
    C++ STL堆操作
    C语言 sscanf用法详解
    Sword 内核队列二
    Sword 内核队列一
    Sword libcurl回调函数相关知识
  • 原文地址:https://www.cnblogs.com/dailyprogrammer/p/12241630.html
Copyright © 2011-2022 走看看