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

    题目

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

    push(x) -- 元素 x 入栈
    pop() -- 移除栈顶元素
    top() -- 获取栈顶元素
    empty() -- 返回栈是否为空
    注意:

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

    思路

    跟用栈实现队列差不多,就是pop的时候,应该pop的是刚刚push进队列的元素,为了实现这一点,可以在push之前,利用另一个队列,将当前队列清空,然后push元素,再将另一个队列的元素push回来。

    代码

    class MyStack {
    private:
        queue<int> q1,q2;
    public:
        /** Initialize your data structure here. */
        MyStack() {
            
        }
        
        /** Push element x onto stack. */
        void push(int x) {
            while(!q2.empty()){
                q1.push(q2.front());
                q2.pop();
            }
            q2.push(x);
            while(!q1.empty()){
                q2.push(q1.front());
                q1.pop();
            }
        }
        
        /** Removes the element on top of the stack and returns that element. */
        int pop() {
            int a=q2.front();
            q2.pop();
            return a;
        }
        
        /** Get the top element. */
        int top() {
            return q2.front();
        }
        
        /** Returns whether the stack is empty. */
        bool empty() {
            return q2.empty();
        }
    };
    
    /**
     * Your MyStack object will be instantiated and called as such:
     * MyStack obj = new MyStack();
     * obj.push(x);
     * int param_2 = obj.pop();
     * int param_3 = obj.top();
     * bool param_4 = obj.empty();
     */
    ```
  • 相关阅读:
    HDU 1525
    kmp模板
    hdu 4616 Game(树形DP)
    hdu 4619 Warm up 2(并查集活用)
    hdu 4614 Vases and Flowers(线段树加二分查找)
    Codeforces 400D Dima and Bacteria(并查集最短路)
    poj 2823 Sliding Window (单调队列)
    hdu 2196 Computer(树形dp)
    hdu 4604 Deque
    最短路径
  • 原文地址:https://www.cnblogs.com/Bipolard/p/10173568.html
Copyright © 2011-2022 走看看