• 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();
     */
    
  • 相关阅读:
    linux的一些记录
    ant的一些记录
    cmd
    关于请求转发、重定向、url重写
    函数声明优先级高于变量赋值
    认识hasLayout——IE浏览器css bug的一大罪恶根源
    undefined与null的区别
    Javascript面向对象编程(三):非构造函数的继承
    Javascript面向对象编程(二):构造函数的继承
    Javascript 面向对象编程(一):封装
  • 原文地址:https://www.cnblogs.com/baebae996/p/13863940.html
Copyright © 2020-2023  润新知