当前位置: 首页 > news >正文

栈与队列面试题(Java数据结构)

前言:

        这里举两个典型的例子,实际上该类型的面试题是不确定的!

用栈实现队列:

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

方法一:双栈
思路

将一个栈当作输入栈,用于压入 push 传入的数据;另一个栈当作输出栈,用于 pop 和 peek 操作。

每次 pop 或 peek 时,若输出栈为空则将输入栈的全部数据依次弹出并压入输出栈,这样输出栈从栈顶往栈底的顺序就是队列从队首往队尾的顺序。

class MyQueue {private Deque<Integer> st1;private Deque<Integer> st2;public MyQueue() {st1 = new ArrayDeque<>();st2 = new ArrayDeque<>();}public void push(int x) {st1.push(x);}public int pop() {if(st2.isEmpty()) {inout2();}return st2.pop();}public int peek() {if(st2.isEmpty()) {inout2();}return st2.peek();}public boolean empty() {if(st1.isEmpty() && st2.isEmpty()) {return true;}return false;}private void inout2() {while(!st1.isEmpty()) {st2.push(st1.pop());}}
}

用队列实现栈:

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

为了满足栈的特性,即最后入栈的元素最先出栈,在使用队列实现栈时,应满足队列前端的元素是最后入栈的元素。可以使用两个队列实现栈的操作,其中 queue 1用于存储栈内的元素,queue 2作为入栈操作的辅助队列入栈操作时,首先将元素入队到 queue 2,

然后将 queue 1​的全部元素依次出队并入队到 queue 2,此时 queue 2的前端的元素即为新入栈的元素,再将 queue1和queue 2互换,则 queue1的元素即为栈内的元素,queue1 的前端和后端分别对应栈顶和栈底由于每次入栈操作都确保 queue 1的前端元素为栈顶元素,

因此出栈操作和获得栈顶元素操作都可以简单实现。出栈操作只需要移除 queue 1的前端元素并返回即可,获得栈顶元素操作只需要获得 queue 
1的前端元素并返回即可(不移除元素)。

class MyStack {private Queue<Integer> q1;private Queue<Integer> q2;public MyStack() {q1 = new LinkedList<>();q2 = new LinkedList<>();}public void push(int x) {q2.offer(x);while(!q1.isEmpty()){q2.offer(q1.poll());}Queue<Integer> tmp = q1;q1 = q2;q2 = tmp;}public int pop() {return q1.poll();}public int top() {return q1.peek();}public boolean empty() {if(q1.isEmpty() && q2.isEmpty()) {return true;}return false;}
}

http://www.lryc.cn/news/455882.html

相关文章:

  • 手撕数据结构 —— 顺序表(C语言讲解)
  • 女友学习前端第二天-笔记
  • 电脑手机下载小米xiaomi redmi刷机包太慢 解决办法
  • Python中的策略模式:解锁编程的新维度
  • ara::core::Future::then()的概念和使用方法
  • 九、5 USART串口数据包
  • SQL第12课——联结表
  • CentOS7 虚拟机操作系统安装及相关配置教程
  • 『网络游戏』窗口基类【06】
  • 04_23 种设计模式之《单例模式》
  • 视频加字幕用什么软件最快?12款工具快速添加字幕!
  • C++:string (用法篇)
  • 力扣随机题
  • CSS样式基础样式选择器(案例+代码实现+效果图)
  • Linux系统编程—I/O缓冲区(C语言实现)
  • MySQL多表查询:行子查询
  • .NET CORE程序发布IIS后报错误 500.19
  • Qt 6 相比 Qt 5 的主要提升与更新
  • 【数据结构】介绍
  • 论医疗类系统全国运营推广策略
  • Redis入门第一步:认识Redis与快速安装配置
  • ES postman操作全量修改,局部修改,删除
  • 社区交流礼仪 | 提问的艺术
  • 极客兔兔Gee-Cache Day5
  • 【IPv6】IPv6地址格式及地址分类(组播、单播、任播)整理
  • Linux数据备份
  • 回到原点再出发
  • SimpleFoc以及SVPWM学习补充记录
  • 免费 Oracle 各版本 离线帮助使用和介绍
  • 刷题 二叉树