代码随想录|day 10

Day 10 回归

STL教程(五):C++ STL常用容器之deque - 知乎 (zhihu.com) deque

代码随想录|day 10_第1张图片

一、理论学习

栈和队列这两种数据结构。关于这四个问题。

  1. C++中stack 是容器么?
  2. 我们使用的stack是属于哪个版本的STL?SGI STL
  3. 我们使用的STL中stack是如何实现的?栈的底层实现可以是vector,deque,list 都可以, 主要就是数组和链表的底层实现。
  4. stack 提供迭代器来遍历stack空间么?栈不提供走访功能,也不提供迭代器(iterator)

代码随想录|day 10_第2张图片

代码随想录|day 10_第3张图片

二、刷题部分

用栈实现队列的思路是;用两个栈来颠倒顺序一正一反就得到了队列 想要的顺序。 相当于。 一个倒扣的杯子。 我们将它翻一次。 得到的就是。 正的杯子。 所以说对于push pop peek和Empty操作的话。 这当中最 重要的应该是pop操作。 我们看到我们在做push的时候一直都是push在in这个栈里面。 然后我们做pop的时候一直都是pop的是我们的 Out这栈。 那么我们来简单模拟一下。 我们有一个元素进入那我们就把它插到我们的in这个栈当中,然后呢,多插入几个之后就有了一个”小杯子“,然后我们将它,呃,在我们的这个。 Out为空的时候全部倒进去那这样我们去pop的时候得到的就是一个正序的一个序列。 那么这时候又来元素了怎么办?我们直接加到in里面,那如果我们想要pop的时候我们会发现我们的out里面还有没pop玩的元素直接在out里面pop就行了。

232. 用栈实现队列 - 力扣(LeetCode)

说明:

  • void push(int x) 将元素 x 推到队列的末尾

  • int pop() 从队列的开头移除并返回元素

  • int peek() 返回队列开头的元素

  • boolean empty() 如果队列为空,返回 true ;否则,返回 false

    class MyQueue {
    public:
        stackin;
        stackout;
        MyQueue() {
        }
        //进照进
        void push(int x) {
            in.push(x);
        }
        //从队列的开头移除并返回元素
        int pop() {
            if(out.empty()){
                while(!in.empty()){
                    out.push(in.top());
                    in.pop();
                }
            }
            int res = out.top();
            out.pop();
            return res;
        }
        
        int peek() {
            int ans=this->pop();
            out.push(ans);
            return ans;
        }
        
        bool empty() {
            return in.empty()&&out.empty();
        }
    };
    
    /**
     * 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();
     */
    

    225. 用队列实现栈 - 力扣(LeetCode)

    ​ 用队列去实现栈, 会发现之前那个理论不对。 因为队列本来就是正序的,无论你用队列翻转几次,他都还是正序。 这样呢,我们想到一个好方法,我们只需要将 所有的元素,依次向后移。 直到我们栈的出栈元素为止。

    class MyStack {
    public:
        queuein;
        MyStack() {
    
        }
        
        void push(int x) {
            in.push(x);
    
        }
        
        int pop() {
            int size=in.size();
            size--;
            while(size--){
                in.push(in.front());
                in.pop();
            }
            int res=in.front();
            in.pop();
            return res;
        }
        
        int top() {
            int ans=this->pop();
            in.push(ans);
            return ans;
        }
        
        bool empty() {
            return in.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();
     */
    

三、碎碎念

今天状态其实不是很好,中途有很多时间都是浪费的。 其实满打满算两个小时应该是没有做到的,但是也没有心情 去补 今天的东西。 然后我最近也比较迷茫, 时间真的是能淡忘一切的东西。 从一开始我不愿意去接受然后无所事事到尝试着去。 但不知道这样的改变有没有意义。 再到现在,我希望努力的去争取去准备去为我的 不可知而又凶险的将来做一些打算的时候, 但又因为。 这种。 未知和凶险。 让我的进度和动力都不足。 处于一个准备和不准备的中间态。 很讨厌,很讨厌这种状态。 马上就是新的一年了。 我想把能做的事全部都做好。 所以说我应该着手去准备。 关于笔试,关于面试。 等等。 不应该让。 刷题。 成为我一天的任务。 而是应该规定自己什么时间去完成这个刷。题工作。 要克服。 不能早起。 的坏习惯。 如果早上的时间可以完成刷题总结,那么下午的时间就可以用来做别的一些事情,那这样一天的安排才会比较合理。 其实还有很多想说的话,但是。 在书面上的就尽于此了。

你可能感兴趣的:(c++)