zoukankan      html  css  js  c++  java
  • 【小白刷题之路Day29】leetcode232.用栈实现队列(C++ STL stack的熟悉与使用)

    • leetcode232.用栈实现队列

    这道题和上一篇是姊妹篇:【小白刷题之路Day29】leetcode225. 用队列实现栈(C++ STL 队列的使用操作)

    使用栈实现队列的下列操作:
    
        push(x) -- 将一个元素放入队列的尾部。
        pop() -- 从队列首部移除元素。
        peek() -- 返回队列首部的元素。
        empty() -- 返回队列是否为空。
    
    示例:
    
    MyQueue queue = new MyQueue();
    
    queue.push(1);
    queue.push(2);  
    queue.peek();  // 返回 1
    queue.pop();   // 返回 1
    queue.empty(); // 返回 false
    
    说明:
    
        你只能使用标准的栈操作 -- 也就是只有 push to top, peek/pop from top, size, 和 is empty 操作是合法的。
        你所使用的语言也许不支持栈。你可以使用 list 或者 deque(双端队列)来模拟一个栈,只要是标准的栈操作即可。
        假设所有操作都是有效的 (例如,一个空的队列不会调用 pop 或者 peek 操作)。
    
    来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/implement-queue-using-stacks
    著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

    我的提交:

    class MyQueue {
    private:
        stack<int> myStack1;
        stack<int> myStack2; 
    public:
        /** Initialize your data structure here. */
        MyQueue() {
        }
        
        /** Push element x to the back of queue. */
        void push(int x) {
            myStack1.push(x);
        }
        
        /** Removes the element from in front of queue and returns that element. */
        int pop() {
            if (myStack2.empty()){
                while(!myStack1.empty()){
                    myStack2.push(myStack1.top());
                    myStack1.pop();
                }
            }
            int res = myStack2.top();
            myStack2.pop();        
            return res;
        }
        
        /** Get the front element. */
        int peek() {
            if (myStack2.empty()){
                while(!myStack1.empty()){
                    myStack2.push(myStack1.top());
                    myStack1.pop();
                }
            }
            return myStack2.top();  
        }
        
        /** Returns whether the queue is empty. */
        bool empty() {
            return myStack1.empty() && myStack2.empty();
        }
    };

    思路:两个栈S1、S2,栈1用来接收元素,当需要pop时,元素转到栈2,在栈2中逆序输出即可。

    输入直接push进栈1,pop时栈2不为空的话直接pop,为空的话从栈1中再倒腾点元素过来即可。

    这个方案我觉得还是很简洁的。

    • 总结
    1. 本题属于栈与队列数据结构的基本题
    2. 收获:对C++ STL stack的用法更熟悉了一些
    • stack<int> s;
    • s.push()
    • s.pop()    // 注意s.pop()和q.pop()一样同样不返回任何值。
    • s.top()
    • s.size()
    • s.empty()
    • stack与queue对比:
    • stack.top() 独有
    • queue.front() 与 queue.back()独有
  • 相关阅读:
    条件概率和链式法则 conditional probability & chain rule
    如何训练一个神经网络?
    高斯贝叶斯分类器
    LDA
    机器学习中的数学-线性判别分析(LDA)
    理解矩阵
    pca数学原理(转)
    SVM入门
    Top 10 Machine Learning Algorithms For Beginners
    vfp
  • 原文地址:https://www.cnblogs.com/ACStrive/p/11602538.html
Copyright © 2011-2022 走看看