首页 > 编程语言 >代码随想录算法训练营第十天|力扣232.用栈实现队列、力扣225.用队列实现栈

代码随想录算法训练营第十天|力扣232.用栈实现队列、力扣225.用队列实现栈

时间:2023-08-09 23:22:22浏览次数:48  
标签:queue 队列 随想录 pop 力扣 int push stackOut public

栈与队列

理论知识

栈提供push 和 pop 等等接口,所有元素必须符合先进后出规则,所以栈不提供走访功能,也不提供迭代器(iterator)。 不像是set 或者map 提供迭代器iterator来遍历所有元素。

栈是以底层容器完成其所有的工作,对外提供统一的接口,底层容器是可插拔的(也就是说我们可以控制使用哪种容器来实现栈的功能)。

所以STL中栈往往不被归类为容器,而被归类为container adapter(容器适配器)。

那么问题来了,STL 中栈是用什么容器实现的?

从下图中可以看出,栈的内部结构,栈的底层实现可以是vector,deque,list 都是可以的, 主要就是数组和链表的底层实现

image-20230809231208898

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

  • 新建一个栈
  • push的时候,stackIn.push()即可
  • pop的时候,判断if(stackOut.empty()){
  • while(stackIn.empty()){
  • stackOut.push(stackIn.top());
  • stackIn.pop();}
  • return result;}
  • peek的时候,result=this->pop();
  • stackOut.push(result);
  • return result;
class MyQueue {
    //需要两个栈来模拟输入输出
    Stack<Integer> stackIn;
    Stack<Integer> stackOut;

    public MyQueue() {
        stackIn = new Stack<>();//负责进栈
        stackOut = new Stack<>();//负责出栈
    }
    
    public void push(int x) {
        stackIn.push(x);
    }
    
    public int pop() {
        if(stackOut.isEmpty()){
            while(!stackIn.isEmpty()){
                int x = stackIn.pop();
                stackOut.push(x);
            }
        }
        return stackOut.pop();
    }
    
    public int peek() {
        int temp = this.pop();
        stackOut.push(temp);
        return temp;
    }
    
    public boolean empty() {
        return stackIn.isEmpty()&&stackOut.isEmpty();
    }
}

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

  • 用一个队列就能实现

  • push时,直接放入

  • pop时,先弹出再插入

  • queue队列的api:add(),poll();

  • Queue queue = new LinkedList();

class MyStack {
    Queue<Integer> queue;

    public MyStack() {
        queue = new LinkedList();
    }
    
    public void push(int x) {
        queue.add(x);
    }
    
    public int pop() {
        int size = queue.size() - 1;
        while(size-- > 0){
            int temp = queue.poll();
            queue.add(temp);
        }
        return queue.poll();
    }
    
    public int top() {
        int temp = this.pop();
        queue.add(temp);
        return temp;
    }
    
    public boolean empty() {
        return queue.size()<=0;
    }
}

标签:queue,队列,随想录,pop,力扣,int,push,stackOut,public
From: https://www.cnblogs.com/zcctxr/p/17619129.html

相关文章

  • 代码随想录算法训练营第十四天| 理论基础 递归遍历 迭代遍历
     理论基础    卡哥建议:需要了解 二叉树的种类,存储方式,遍历方式 以及二叉树的定义   文章讲解:https://programmercarl.com/%E4%BA%8C%E5%8F%89%E6%A0%91%E7%90%86%E8%AE%BA%E5%9F%BA%E7%A1%80.html   补充的知识点:   名词的概念看卡哥文章。二叉树......
  • (未完全掌握)代码随想录算法训练营第八、九天|KMP算法;力扣28.实现strStr(),力扣459.重
    KMP算法(没掌握)主要功能:字符串匹配理论:检测文本串中是否出现过模式串前缀就是包含首字母不包含尾字母的所有子串后缀就是包含尾字母不包含首字母的所有子串最长相等前后缀:对子串分别分析,从左向右前缀表是用来回退的,它记录了模式串与主串(文本串)不匹配的时候,模式串应该从......
  • [代码随想录]Day13-二叉树part02
    题目:102.二叉树的层序遍历思路:先把根放进去,然后每次都是左右就可以了。记录一个深度,当len(res)==deepth的时候就说明这个深度还没有实例化,先搞一个再去收集。代码:/***Definitionforabinarytreenode.*typeTreeNodestruct{*Valint*Left*TreeN......
  • Feign和消息队列(MQ)的区别
    Feign和消息队列(MQ)是两个不同的概念,它们分别用于不同的目的。下面我将分别介绍它们的作用和特点。Feign是一个在微服务架构中用于实现服务间通信的轻量级、声明式的HTTP客户端。它由Netflix开源,并且与SpringCloud集成得非常紧密。Feign可以让开发人员以类似于编写本地方法调用的......
  • 单调队列
    单调性的原理可以用一句没有啥道理的但又有点道理的话理解:如果一个人比你小还比你强,你就永远打不过他了。最大子序和输入一个长度为\(n\)的整数序列,从中找出一段长度不超过\(m\)的连续子序列,使得子序列中所有数的和最大。注意:子序列的长度至少是\(1\)。转换成前缀和选......
  • 复习消息队列之RabbitMQ
    概念:RabbitMQ是使用Erlang语言开发的开源消息队列系统,基于AMQP协议来实现。AMQP的主要特征是面向消息、队列、路由(包括点对点和发布/订阅)、可靠性、安全。AMQP协议更多用在企业系统内对数据一致性、稳定性和可靠性要求很高的场景,对性能和吞吐量的要求还在其次。对比:RabbitMQ对......
  • [代码随想录]Day12-二叉树part01
    今天的题目就是二叉树的前中后序遍历,目前只写了递归方法,之后再补迭代方法。题目:144.二叉树的前序遍历思路:前序遍历:根-左-右代码1:递归,递归情况下只需要改变递归的顺序即可实现前中后序遍历。/***Definitionforabinarytreenode.*typeTreeNodestruct{*Va......
  • 代码随想录算法训练营第十三天| 239. 滑动窗口最大值 347.前 K 个高频元素 总结
    239.滑动窗口最大值 (一刷至少需要理解思路)    卡哥建议:之前讲的都是栈的应用,这次该是队列的应用了。本题算比较有难度的,需要自己去构造单调队列,建议先看视频来理解。    题目链接/文章讲解/视频讲解:https://programmercarl.com/0239.%E6%BB%91%E5%8A%A8%E7%AA%......
  • [代码随想录]Day11-栈与队列part03
    题目:239.滑动窗口最大值思路:说实话这题真不能说是困难题,麻烦是麻烦点但是比较容易实现。维护一个单调队列,队列内是由大到小排序(数组内的顺序是由小到大的),每次移动都会进行两次判断:如果前面去掉的数就是队列的首部,那么就要把首部移除如果后面添加的数比队尾的元素要大就......
  • 代码随想录算法训练营第十一天| 20. 有效的括号 1047. 删除字符串中的所有相邻重复项
    20.有效的括号    卡哥建议:讲完了栈实现队列,队列实现栈,接下来就是栈的经典应用了。 大家先自己思考一下 有哪些不匹配的场景,在看视频 我讲的都有哪些场景,落实到代码其实就容易很多了。   题目链接/文章讲解/视频讲解:https://programmercarl.com/0020.%E6%9C%8......