【栈与队列part01】| 232.用栈实现队列、225.用队列实现栈

news/2024/11/29 8:59:54/

目录

✿LeetCode232.用栈实现队列❀

✿LeetCode225. 用队列实现栈❀ 

✿LeetCode232.用栈实现队列❀

链接:232.用栈实现队列

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

实现 MyQueue 类:

  • void push(int x) 将元素 x 推到队列的末尾
  • int pop() 从队列的开头移除并返回元素
  • int peek() 返回队列开头的元素
  • boolean empty() 如果队列为空,返回 true ;否则,返回 false

说明:

  • 你 只能 使用标准的栈操作 —— 也就是只有 push to toppeek/pop from topsize, 和 is empty 操作是合法的。
  • 你所使用的语言也许不支持栈。你可以使用 list 或者 deque(双端队列)来模拟一个栈,只要是标准的栈操作即可。

 

本题其实不难,主要是pop()操作,要判断一下出栈是否为空,如果为空吧入栈的元素全加入到出栈,然后返回pop(),代码如下: 

class MyQueue {Stack<Integer> in=new Stack<>();Stack<Integer> out=new Stack<>();public MyQueue() {}public void push(int x) {in.push(x);}public int pop() {inToOut();return out.pop();}public int peek() {inToOut();return out.peek();}public boolean empty() {return in.isEmpty() && out.isEmpty();}public void inToOut(){if(out.isEmpty()){while(!in.isEmpty()){out.push(in.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();*/

✿LeetCode225. 用队列实现栈❀ 

链接:225.用队列实现栈

请你仅使用两个队列实现一个后入先出(LIFO)的栈,并支持普通栈的全部四种操作(pushtoppop 和 empty)。

实现 MyStack 类:

  • void push(int x) 将元素 x 压入栈顶。
  • int pop() 移除并返回栈顶元素。
  • int top() 返回栈顶元素。
  • boolean empty() 如果栈是空的,返回 true ;否则,返回 false 。

注意:

  • 你只能使用队列的基本操作 —— 也就是 push to backpeek/pop from frontsize 和 is empty 这些操作。
  • 你所使用的语言也许不支持队列。 你可以使用 list (列表)或者 deque(双端队列)来模拟一个队列 , 只要是标准的队列操作即可。

 

题目虽然要求的是两个队列实现栈,但是一个队列也可以实现栈,让每一个入队列的元素再次入到队列尾部,完成一下逆序,这样就实现了栈,代码如下: 

class MyStack {// 一个队列实现栈Queue<Integer> queue=new LinkedList<>();public MyStack() {}public void push(int x) {queue.add(x);for(int i=0;i<queue.size()-1;i++){queue.add(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();*/

http://www.ppmy.cn/news/414979.html

相关文章

从实现到原理,总结11种延迟任务的实现方式(下)

7 监听Redis过期key 在Redis中&#xff0c;有个发布订阅的机制 生产者在消息发送时需要到指定发送到哪个channel上&#xff0c;消费者订阅这个channel就能获取到消息。图中channel理解成MQ中的topic。 并且在Redis中&#xff0c;有很多默认的channel&#xff0c;只不过向这些…

【Dart】Dart学习(四)运算符

运算符 Dart 支持下表所示的操作符&#xff0c;它也体现了 Dart 运算符的关联性和 优先级 的从高到低的顺序。这也是 Dart 运算符关系的近似值。你可以将这些运算符实现为 一个类的成员。 Description Operator Associativityunary postfix expr expr-- () [] ?[] . ?. !No…

git上修改远程仓库的地址

vscode中修改/重置gitlab远程仓库地址 方法1&#xff1a;更换git远程仓库地址 1.查看当前remotes git remote -v 2.修改remotes git remote set-url origin https://github.com/test/test.git 方法2&#xff1a;重置git远程仓库地址 1.删除当前地址 git remote rm origin 2…

壁纸来了,这些壁纸绝对是你喜欢的风格

今天分享一些好看的壁纸&#xff0c;这些壁纸都是我精挑细选的哦&#xff01;相信你们一定会很喜欢&#xff01;&#xff08;这都是我猜测的&#xff09;原图下载再最下方。拿走图别忘记赞我&#xff01; 图片来源&#xff1a;网络&#xff0c;如侵联删 今日壁纸原图 识别下方小…

每日一道面试题之Java中都有哪些引用类型?

在 Java 中&#xff0c;引用类型指向的数据在堆中分配&#xff0c;而基本类型的变量和对象的引用变量存储在栈内存中&#xff0c;但引用类型实际的对象存储在堆内存中。 Java 中有以下四种引用类型&#xff1a; 强引用&#xff08;Strong Reference&#xff09;&#xff1a; …

计算机网络之网络层:数据平面

四.网络层&#xff1a;数据平面 4.1 网络层概述 网络层被分解为两个相互作用的部分&#xff0c;即数据平面和控制平面。 数据平面决定到达路由器输入链路之一的数据报如何转发到该路由器的输出链路之一&#xff0c;转发方式有&#xff1a; 传统的IP转发&#xff1a;转发基于…

【网游服务端】新版天龙八部带桃花岛一键安装即玩服务端+安装教程

下载链接&#xff1a;https://pan.baidu.com/s/1ds_xFq1Rd1_xC4515BRGXw 提取码&#xff1a;soho

天龙八部音乐文件提取

两年前&#xff0c;我接触到这个网游&#xff0c;可以这么说&#xff0c;在中国游戏界世风日下的大环境下&#xff0c;天龙八部还是不错的。不仅仅是因为原著出自金庸大侠之手&#xff0c;他的成功更在于他的游戏的制作水平。所以也激起了菜鸟我的研究欲望&#xff0c; 虽不是什…