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

embedded/2024/10/9 0:17:34/

前言:

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

用栈实现队列:

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

方法一:双栈
思路

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

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

java">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的前端元素并返回即可(不移除元素)。

java">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.ppmy.cn/embedded/124790.html

相关文章

用 Delphi 做了一个简单的 CMS

Delphi 代码上面花的时间最少。 前提是你要熟悉 Delphi 的 WebBroker 框架。不熟悉也没关系&#xff0c;5分钟就可以入门&#xff0c;10分钟就熟悉了。 CMS 就是个基于 WEB 的内容管理嘛。相当于一个简单的没有跟贴功能的 BBS。这样的东西&#xff0c;后边是数据库&#xff0…

如何让70B参数的大型语言模型在资源有限的边缘设备上高效运行?

你有没有想过,像我们平时使用的智能手机、家里的智能音箱这样的小设备,也能运行那些参数量高达数十亿的大型语言模型(LLM)呢?这听起来像是天方夜谭,毕竟这些模型动辄需要巨大的算力和存储资源,但实际上,随着技术的发展,这个梦想正在变成现实。那么,问题来了,怎么在资…

flutter_鸿蒙next_Dart基础①字符串

目录 代码示例 代码逐段解析 1. 字符串的声明与打印 2. 数字的声明与打印 3. 多行字符串 4. 字符串拼接 5. 字符串分割 6. 字符串修剪 7. 检查字符串是否为空 8. 字符串替换 9. 正则表达式与电话号码验证 10. 字符串查找 11. 字符串定位 写在最后 在本篇博客中&a…

自动驾驶系列—LDW(车道偏离预警):智能驾驶的安全守护者

&#x1f31f;&#x1f31f; 欢迎来到我的技术小筑&#xff0c;一个专为技术探索者打造的交流空间。在这里&#xff0c;我们不仅分享代码的智慧&#xff0c;还探讨技术的深度与广度。无论您是资深开发者还是技术新手&#xff0c;这里都有一片属于您的天空。让我们在知识的海洋中…

昇思MindSpore进阶教程--单节点数据缓存(上)

大家好&#xff0c;我是刘明&#xff0c;明志科技创始人&#xff0c;华为昇思MindSpore布道师。 技术上主攻前端开发、鸿蒙开发和AI算法研究。 努力为大家带来持续的技术分享&#xff0c;如果你也喜欢我的文章&#xff0c;就点个关注吧 正文开始 对于需要重复访问远程的数据集…

【论文速看】DL最新进展20241008-多模态、医学图像分割、扩散模型

目录 【多模态】【医学图像分割】【扩散模型】 【多模态】 PaliGemma: A versatile 3B VLM for transfer 研究机构&#xff1a;google 论文链接&#xff1a;https://arxiv.org/pdf/2407.07726 模型及其说明链接&#xff1a;https://huggingface.co/google/paligemma-3b-pt-22…

栈_1(2024年10月08日)

2024年10月08日 记录_导读 2024年10月08日 19:31 关键词 队列 线性表 假溢出 逻辑结构 物理结构 元素添加 数据结构 操作 元素 top 入栈 出栈 极限情况 size 函数 对比 结构 指针 链表 单链表 全文摘要 队列作为一种数据结构&#xff0c;以其先进先出的特性&#xff0c;在…

PyQt入门指南一 框架介绍

1. PyQt概述 PyQt是一个用于创建桌面应用程序的Python绑定库&#xff0c;它基于Qt框架。Qt是由挪威公司Trolltech开发的跨平台C图形用户界面应用程序开发框架。PyQt使得Python开发者能够利用Qt的强大功能来构建专业的图形用户界面&#xff08;GUI&#xff09;应用程序。 2. 为…