[LeetCode]Implement Stack using Queues

来源:互联网 发布:网络语言大二班 编辑:程序博客网 时间:2024/05/16 11:08

Implement the following operations of a stack using queues.

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

Update (2015-06-11):
The class name of the Java function had been updated to MyStack instead of Stack.

Credits:

Special thanks to @jianchao.li.fighter for adding this problem and all test cases.

[LeetCode]

两种实现方法

1)两个队列,当取栈顶时,把所有元素进到另一个队列,然后最后出队列的就是栈顶。pop的操作也是类似的,注意两个队列之间的转换。

2)一个队列,记录队列此时的长度n,出队列第n次的元素就是栈顶元素。我们可以把出队列的元素再次入队列,这样就可以用一个队列实现。

同理用两个栈实现队列也是类似的做法。

两个队列实现:

class Stack {private:    queue<int>temp[2];    int cur = 0;public:    // Push element x onto stack.    void push(int x) {        temp[cur].push(x);    }    // Removes the element on top of the stack.    void pop(void) {        while(temp[cur].size()>1){            int n = temp[cur].front();            temp[cur].pop();            temp[1-cur].push(n);        }        temp[cur].pop();        cur = 1-cur;    }    // Get the top element.    int top(void) {         while(temp[cur].size()>1){            int n = temp[cur].front();            temp[cur].pop();            temp[1-cur].push(n);        }        int ret = temp[cur].front();        temp[cur].pop();        temp[1-cur].push(ret);        cur = 1- cur;        return ret;    }    // Return whether the stack is empty.    bool empty(void) {        return temp[cur].empty();    }};
一个队列实现:

class Stack {private:    queue<int>temp;public:    // Push element x onto stack.    void push(int x) {        temp.push(x);    }    // Removes the element on top of the stack.    void pop(void) {       int len = temp.size();       while(len>1){           int n = temp.front();           temp.pop();           temp.push(n);           len -- ;       }       temp.pop();    }    // Get the top element.    int top(void) {        int len = temp.size();        while(len>1){            int n = temp.front();            temp.pop();            temp.push(n);            len -- ;        }        int ret = temp.front();        temp.pop();        temp.push(ret);        return ret;    }    // Return whether the stack is empty.    bool empty(void) {        return temp.empty();    }};



0 0
原创粉丝点击