zoukankan      html  css  js  c++  java
  • LeetCode(232):用栈实现队列

    题目描述

    image1.png

    实现思路

    我们可以将两个栈分别设置为输入栈s1、输出栈s2
    需要输入(push)时,将元素放入s1
    需要输出/访问栈顶(pop 或 peek)时,就从s2拿出来

    stack的常用函数

    • s.push(ele)-将ele放入栈(void)
    • s.pop()-将栈顶元素弹出栈(void)
    • s.top()-返回栈顶元素(但不弹出)
    • s.empty()-返回布尔值,表示栈是否为空
    • s.size()-返回栈中元素的个数

    1、push
    入栈操作不用多说,直接push入s1即可
    2、pop
    我们的目标是从队列开头移除并返回元素(即返回最早入队的元素)
    首先检查s2是否为空:
    若s2为空,则将s1的元素依次通过top+pop放入s2
    (此时在s2栈顶的就是最早入队的元素)
    若s2不为空,直接取出s2栈顶元素即可
    3、peek
    原理与pop完全相同,只不过不需要移除目标元素
    4、empty
    若s1和s2都为空,则表明队列已空

    代码实现(C++)

    class MyQueue {
    public:
        stack<int> s1; //输入栈
        stack<int> s2; //输出栈
        
        MyQueue() {}
        
        void push(int x) {
            s1.push(x);
        }
        
            int ele;
            if(s2.empty()==false){
                ele=s2.top();
                s2.pop();
            }else{
                while(s1.empty()!=true){
                    s2.push(s1.top());
                    s1.pop();
                }
                ele=s2.top();
                s2.pop();
            }
            return ele;
        }
        
        int peek() {
            if(s2.empty()==false){
                return s2.top();
            }else{
                while(s1.empty()!=true){
                    s2.push(s1.top());
                    s1.pop();
                }
                return s2.top();
            }
        }
        
        bool empty() {
            return s1.empty()&&s2.empty() ? true : false;
        }
    };
    
    /**
     * Your MyQueue object will be instantiated and called as such:
     * MyQueue* obj = new MyQueue();
     * obj->push(x);
     * int param_2 = obj->pop();
     * int param_3 = obj->peek();
     * bool param_4 = obj->empty();
     */
    
  • 相关阅读:
    python继承__init__函数
    Oracle 用户(user)和模式(schema)的区别【转】
    url增加签名验证防窜改
    Codeforces 每日一练 706C+575H+15C
    Codeforces每日一练 1194D+552C+1117D
    每日一练周赛#2 题解
    AtCoder Beginner Contest 160 题解(F待填坑)
    Codeforces每日一练 1030D+1154E+540D
    Codeforcs 每日一练 678C+527C+1012C
    Codeforces 每日一练922C+725D+1152D
  • 原文地址:https://www.cnblogs.com/baebae996/p/13863940.html
Copyright © 2011-2022 走看看