代码编织梦想

class MyQueue {

    Stack<Integer> stackIn;
    Stack<Integer> stackOut;

    /** Initialize your data structure here. */
    public MyQueue() {
        stackIn = new Stack<>(); // 负责进栈
        stackOut = new Stack<>(); // 负责出栈
    }
    
    /** Push element x to the back of queue. */
    public void push(int x) {
        stackIn.push(x);
    }
    
    /** Removes the element from in front of queue and returns that element. */
    public int pop() {    
        dumpstackIn();
        return stackOut.pop();
    }
    
    /** Get the front element. */
    public int peek() {
        dumpstackIn();
        return stackOut.peek();
    }
    
    /** Returns whether the queue is empty. */
    public boolean empty() {
        return stackIn.isEmpty() && stackOut.isEmpty();
    }

    // 如果stackOut为空,那么将stackIn中的元素全部放到stackOut中
    private void dumpstackIn(){
        if (!stackOut.isEmpty()) return; 
        while (!stackIn.isEmpty()){
                stackOut.push(stackIn.pop());
        }
    }
}

/**
 * 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();
 * boolean param_4 = obj.empty();
 */
class MyStack {

    Queue<Integer> queue;

    public MyStack() {
        queue = new LinkedList<>();
    }

    //每 offer 一个数(A)进来,都重新排列,把这个数(A)放到队列的队首
    public void push(int x) {
        queue.offer(x);
        int size = queue.size();
        //移动除了 A 的其它数
        while (size-- > 1)
            queue.offer(queue.poll());
    }

    public int pop() {
        return queue.poll();
    }

    public int top() {
        return queue.peek();
    }

    public boolean empty() {
        return queue.isEmpty();
    }
}

/**
 * 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();
 * boolean param_4 = obj.empty();
 */

用两个栈才能实现队列,而实现栈只需要一个队列

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/m0_70815902/article/details/129773621

代码随想录第十天|232.用栈实现队列、225.用队列实现栈_陌璃算的博客-爱代码爱编程

题目链接:232. 用栈实现队列 - 力扣(LeetCode) 没啥好说的,用栈实现队列就是简单的使用两个栈,一个进入一个退出 唯一要注意的点为当退出栈不为空时,应当返回退出栈中的元素,当退出栈为空时再将进入栈的元素弹出

代码随想录算法训练营第十天| 232.用栈实现队列 225. 用队列实现栈_mrmaand12的博客-爱代码爱编程

今天是打基础的一天,了解队列和栈的实现。 上次学习这块记忆犹新,只要打基础,那天的我肯定是沮丧的,总会是说的时候都懂,写的时候不知道从哪里下手,看看这次会遇到什么“艰难险阻”及时记录下来。哈哈 Java 中 我总是不清楚为

代码随想录第十天| 232.用栈实现队列 225. 用队列实现栈_qq_45466450的博客-爱代码爱编程

232.用栈实现队列 需要两个栈,一个入栈,一个出栈 在push数据的时候,数据放进输入栈pop的时候,如果输出栈为空,就把进栈数据全部导入到出栈,再从出栈弹出数据;如果输出栈不为空,就直接从出栈弹出数据判断队列为空:进

代码随想录训练营第十二天-爱代码爱编程

专题:栈和队列 题目:滑动窗口最大值 给定一个数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。 返回滑动窗口中的最大值。    题目解析:怎么处理它?我们实现一个单调队列,(也是一个宫殿)。然后一个数组里面有很多的元素要依次进入队列,(其

《代码随想录 刷题顺序》-爱代码爱编程

文章目录 第三章 数组第四章 链表第五章 哈希表第六章 字符串第七章 栈与队列第八章 二叉树第九章 回溯算法第十章 贪心算法第十一章 动态规划 第三章 数组 704. 二分查找 27. 移除元素 2

代码随想录第十天|● 232.用栈实现队列 ● 225. 用队列实现栈-爱代码爱编程

232.用栈实现队列 代码如下: class MyQueue { Stack<Integer> stackIn; Stack<Integer> stackOut; /*

2024年最新代码随想录算法训练营第十三天 leetcode 239,深入剖析原理-爱代码爱编程

先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前在阿里 深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前! 因此收集整理了一份《202

代码随想录算法训练营第十天 | 232.用栈实现队列、232.用栈实现队列-爱代码爱编程

代码随想录算法训练营第十天 | 232.用栈实现队列、232.用栈实现队列 这个方面有些了解,基础知识要牢牢的掌握。 队列:先进先出。 栈:后进先出。 如果不太了解栈和队列的话可以先看这篇文章:代码随想录

代码随想录算法训练营第十天| 232.用栈实现队列、 225. 用队列实现栈_用栈实现队列 线程安全-爱代码爱编程

在Python中,栈和队列可以使用列表(List)来实现,因为列表提供了在末尾进行添加append()和弹出pop()操作的高效方法。然而,这里有一些需要注意的事项: 栈的实现 栈是一种后进先出(Last In, Firs

javascript arraybuffer的读写与类型转换-爱代码爱编程

一、ArrayBuffer与视图 所有视图的基本单位是ArrayBuffer, ArrayBuffer开辟一块内存空间,以字节为开辟单位,其中只存储二进制格式的数据. ArrayBuffer不可直接读写, 必须通过视图(比

java内存布局-爱代码爱编程

内存对齐 Java内存对齐(Memory Alignment)是一种通过填充(padding)字节来确保内存中的数据按特定边界对齐的技术,目的是提高程序的内存访问效率。内存对齐的核心思想是在访问内存时,CPU可以更高效地读

jdk1.0主要特性-爱代码爱编程

JDK 1.0,也被称为Java 1,是Java编程语言的第一个正式版本,由Sun Microsystems公司在1996年发布。JDK 1.0的发布标志着Java作为一种编程语言和平台的正式诞生,它带来了许多创新的概念和特

代码随想录第十天 232.用栈实现队列 225. 用队列实现栈-爱代码爱编程

LeetCode 232 用栈实现队列  请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作(push、pop、peek、empty): 实现 MyQueue 类: void push(int x) 将元素 x 推到队列的末尾int pop() 从队列的开头移除并返回元素int peek() 返回队列开头的元素boolean emp

代码随想录:第十天 232.用栈实现队列225用队列实现栈-爱代码爱编程

232.用栈实现队列 用栈实现队列的输出需要借助两个栈,先将队列的数据放进栈1,然后将栈1中的数据放进栈2中,只要栈2里面的数据非空,就将栈1里面的元素往里面放。 class MyQueue { public Stack<Integer> stackIn; public Stack<Integer> stac

代码随想录第十天|232.用栈实现队列、225. 用队列实现栈-爱代码爱编程

232.用栈实现队列 请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作(push、pop、peek、empty): 实现 MyQueue 类: void push(int x) 将元素 x 推到队列的末尾int pop() 从队列的开头移除并返回元素int peek() 返回队列开头的元素boolean empty() 如果队列为

代码随想录第十天:232.用栈实现队列、225. 用队列实现栈-爱代码爱编程

232.用栈实现队列 要通过画图来模拟弹出的过程 class MyQueue(object): def __init__(self): self.stack_push = [] # 一个栈用来放入元素 self.stack_pop = [] # 另一个用来弹出元素,实现先进先出 def pus