LeetCode 题解(190): Implement Queue using Stacks

来源:互联网 发布:梦幻西游物价软件 编辑:程序博客网 时间:2024/06/05 17:02

题目:

Implement the following operations of a queue using stacks.

  • push(x) -- Push element x to the back of queue.
  • pop() -- Removes the element from in front of queue.
  • peek() -- Get the front element.
  • empty() -- Return whether the queue is empty.
Notes:
  • You must use only standard operations of a stack -- which means onlypush to top, peek/pop from top, size, and is empty operations are valid.
  • Depending on your language, stack may not be supported natively. You may simulate a stack by using a list or deque (double-ended queue), as long as you use only standard operations of a stack.
  • You may assume that all operations are valid (for example, no pop or peek operations will be called on an empty queue).
题解:

数据结构。

C++版:

class Queue {public:    stack<int> s1, s2;    // Push element x to the back of queue.    void push(int x) {        s1.push(x);    }    // Removes the element from in front of queue.    void pop(void) {        if(s2.empty()) {            while(!s1.empty()) {                s2.push(s1.top());                s1.pop();            }        }        if(!s2.empty())            s2.pop();    }    // Get the front element.    int peek(void) {        if(s2.empty()) {            while(!s1.empty()) {                s2.push(s1.top());                s1.pop();            }        }        if(!s2.empty())            return s2.top();     }    // Return whether the queue is empty.    bool empty(void) {        return s1.empty() && s2.empty() ? true : false;    }};

Java版:

class MyQueue {    // Push element x to the back of queue.    Stack<Integer> s1 = new Stack<>();    Stack<Integer> s2 = new Stack<>();    public void push(int x) {        s1.push(x);    }    // Removes the element from in front of queue.    public void pop() {        if(s2.empty()) {            while(!s1.empty())                 s2.push(s1.pop());        }        if(!s2.empty())            s2.pop();    }    // Get the front element.    public int peek() {        if(s2.empty()) {            while(!s1.empty())                 s2.push(s1.pop());        }        if(!s2.empty())            return s2.peek();        return -1;    }    // Return whether the queue is empty.    public boolean empty() {        return s1.empty() && s2.empty() ? true : false;    }}

Python版:

class Queue(object):    def __init__(self):        """        initialize your data structure here.        """        self.s1, self.s2 = [], []    def push(self, x):        """        :type x: int        :rtype: nothing        """        self.s1.append(x)    def pop(self):        """        :rtype: nothing        """        if len(self.s2) == 0:            while len(self.s1) != 0:                self.s2.append(self.s1[-1])                self.s1.pop()        if len(self.s2) != 0:            self.s2.pop()    def peek(self):        """        :rtype: int        """        if len(self.s2) == 0:            while len(self.s1) != 0:                self.s2.append(self.s1[-1])                self.s1.pop()        if len(self.s2) != 0:            return self.s2[-1]               return None            def empty(self):        """        :rtype: bool        """        if len(self.s1) == 0 and len(self.s2) == 0:            return True        return False

0 0