首页 > 其他分享 >LeetCode.232 用栈实现队列

LeetCode.232 用栈实现队列

时间:2023-02-01 16:34:57浏览次数:46  
标签:队列 LeetCode.232 int 用栈 pop push stackOut empty

1.题目

请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作(push、pop、peek、empty):

实现 MyQueue 类:

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

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

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

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

说明:

你 只能 使用标准的栈操作 —— 也就是只有 push to top, peek/pop from top, size, 和 is empty 操作是合法的。

你所使用的语言也许不支持栈。你可以使用 list 或者 deque(双端队列)来模拟一个栈,只要是标准的栈操作即可。

 


2.代码


class MyQueue {
//定义两个栈
Stack<Integer> stackIn ;
Stack<Integer> stackOut;

public MyQueue() {
stackIn = new Stack<>();//负责进栈
stackOut = new Stack<>();//负责出栈
}

//进栈,将元素x推到队列的末尾,注意只是负责进的栈
public void push(int x) {
stackIn.push(x);

}

//出栈,从队列的开头移除并返回元素,注意只是负责出的栈,还要判断此时这个栈是否为空,空的话就要从进的栈全部弄进出的栈
public int pop() {
dumpStackIn();
return stackOut.pop();//返回要出栈的元素

}
//返回栈顶元素,返回队列开头的元素,注意是从出的栈返回,并且也要判断这个栈是否为空
public int peek() {
dumpStackIn();
return stackOut.peek();

}

//判断这个栈是否为空,注意是&&两个栈同时为空
public boolean empty() {
return stackIn.empty() && stackOut.empty();


}
//倾倒负责进的栈
public void dumpStackIn(){
//如果出的栈不为空,就直接返回,退出方法,不用倾倒
if(!stackOut.empty()){
return;
}
//如果不为空,就循环判断进的栈是否为空,是的或就倾倒到不是空的为止
while(!stackIn.empty()){
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();
*/

标签:队列,LeetCode.232,int,用栈,pop,push,stackOut,empty
From: https://blog.51cto.com/u_15806469/6031664

相关文章

  • 【算法训练营day35】LeetCode860. 柠檬水找零 LeetCode406. 根据身高重建队列 LeetCod
    LeetCode860.柠檬水找零题目链接:860.柠檬水找零独上高楼,望尽天涯路本来以为只想到了最笨的方法,即讨论所有情况。classSolution{public:boollemonadeChange......
  • 异步任务队列
    异步任务队列Task.WhenAll(List<Task>)等List中所有的异步任务完成后才算完成Task.WhenAny(List<Task>)List中某个完成就完成较常用的是Task.WhenAll(List<Task>)不aw......
  • 使用消息队列必须考虑的问题
    总结:为什么使用消息队列?异步、解耦、削峰。消息队列有什么缺点?可用性降低、系统复杂度提高、一致性问题。如何保证消息队列的可用性?镜像集群模式(RabbitMQ),主从......
  • rabbitmq 延时消息队列
    //rabbitmq延时消息队列生产端demo//1.将消息发送到延时交换机对应的队列上delay-queue,指定过期时间;过期后转发的交换机和绑定的key//2.过期时间过期......
  • 堆栈、队列、单调栈、单调队列1
    Stack和Queue——栈和队列栈的定义:栈是限定仅在表头进行插入和删除操作的线性表(先进后出)队列的定义:队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)......
  • 代码随想录 |栈与队列总结篇
    基础知识:栈与队列都是容器接口,而非容器;栈与队列可选容器,缺省状态下是deque;提供push,pop等操作,但不提供送代器,不提供走访功能,因为只能在一边进行插入,弹出操作;栈的经典题......
  • 7-6 银行业务队列简单模拟
    #include<stdio.h>#include<stack>#include<queue>#include<bits/stdc++.h>usingnamespacestd;intmain(){ intn; intflag=1; queue<int>s1,s2;//奇数s1a窗口 scanf("%......
  • 硬盘测速工具中的队列深度是个什么东西——CrystalDiskMark中的Q32T16是什么意思
     ================================ 最近有使用CrystalDiskMark给自己的硬盘做测速,发现有个名词自己不是很理解,就是像Q32T16这样的词: 在网上找了好久,都说Q32T16......
  • Redis实现分布式阻塞队列
    1.Redis分布式锁实现原理分布式锁本质上要实现的目标就是在Redis里面占一个“茅坑”,当别的进程也要来占时,发现已经有人蹲在那里了,就只好放弃或者稍后再试。占坑一般是......
  • 队列
    队列,具有先进先出特点,只允许在一端进行插入操作,在另一端进行删除。 代码实现#-*-coding=utf-8-*-#@Author:Wchime#@time:2023/1/2313:50#......