【栈和队列专题】—— 双队列模拟栈
LeetCode 225 : 用队列实现栈
队列
1.一些关于队列的基本操作
- 向队列中添加元素[3种方法]
queue.add(value)
queue.offer(value)
queue.put(value)
- 删除队首元素
queue.remove()
queue.poll()
queue.take()
- 查看队首元素
queue.element()
queue.peek()
- 判断队列是否为空
queue.isEmpty()
2.队列的实现
(1)可以通过链表来实现队列
(2)可以通过Java中的LinkedList来实现队列
(3)也可以通过栈来模拟队列
队列实现栈
☀️ 解题思路:
(1)用队列模拟栈最重要的就是来完成元素顺序的控制,队列中怎样的元素存储顺序才能和栈相同呢?
(2)栈的主要特点就是后入先出,队列只能通过让实际后入的元素先存储到队列中,这样就满足了后入先出的性质,那么如何才能让后入的元素来先保存到队列中呢?
(3)设置两个队列,一个主队列、一个辅助队列。将新添加的元素保存到辅助队列之中,然后让主队列中的元素全部取出保存到辅助队列中,最后再交换两个队列。这样就保证了实际后入的元素先存储到了队列中。
⛄️ 代码部分:
class MyStack {/*通过两个队列来模拟栈的操作,重点元素如何保证在队列中存储元素的顺序与和栈中存储元素的顺序构成逆序关系*///定义两个队列Queue<Integer> queue1;Queue<Integer> queue2;public MyStack() {/*因为通过队列来模拟栈,所以构造方法中主要是完成两个队列的创建 */queue1 = new LinkedList<>();queue2 = new LinkedList<>();}public void push(int x) {queue2.add(x);//将主队列中的元素取出放到辅助队列中while(!queue1.isEmpty()){queue2.add(queue1.remove());}//交换两个队列Queue temp = queue1;queue1 = queue2;queue2 = temp;}public int pop() {/*对于队列中元素的保存顺序和栈是相同的,所以移除栈顶元素就是删除队首元素 */return queue1.remove();}public int top() {/*与取出队首元素相同 */return queue1.element();}public boolean empty() {/*判断栈是否为空也是判断队列是否为空 */return queue1.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();*/
LeetCode 232:用栈实现队列
- Acwing算法基础课学习笔记(四)--数据结构之单链表双链表模拟栈模拟队列单调栈单调队列KMP
单链表 算法题中最常考的单链表就是邻接表(用来存储图和数),比如最短路问题,最小生成树问题,最大流问题.双链表用于优化某些问题. 利用数组来表达单链表:存储值和指针的两个数组利用下标进行关联. 需要注 ...
- c语言栈的实现以及操作_python模拟栈的操作实现非递归方式的快速排序算法
本文首发地址: https://yishuihancheng.blog.csdn.net/article/details/76185032 欢迎关注我的博客[Together_CZ],我是沂水寒城! ...
- SCU4438 Censor(审查员) (KMP算法与模拟栈的应用 || HASH表与模拟栈的结合)
Censor frog is now a editor to censor so-called sensitive words (敏感词). She has a long text pp. Her j ...
- PHP高级计算器的过程,PHP使用栈完成高级计算器-接上文模拟栈
距离上一篇文章PHP模拟栈,小梦就答应了小伙伴们要使用栈来完成一个实战的例子,今天就给大家带来了这个例子,让大家更加深入理解它的使用场景! 当出现'3+4*3-2'这个字符串的时候,我们头脑中会有很多 ...
- 数据结构 - 栈(数组模拟栈操作)
数组模拟栈操作 package stack;import java.util.Scanner;public class ArrayStackDemo {public static void main( ...
- 单向队列、双端队列、栈的模型实现
引言 自己实现简单的队列.栈的逻辑结构. 队列都包含头和尾两个指针,简单的单向队列只能在一端(如:head端)入列,在另一端(如:tail 端)出列:双端队列可以在 head 进出,也可以在 tail ...
- 数组模拟栈和队列板子
使用数组模拟数据结构栈和队列 栈:后进先出 对于栈:我们使用tt表示栈顶的下标,如果tt==0表示栈空 队列:先进先出 对于队列,我们使用hh表示队首,tt表示队尾,tt初始化为-1,判断队列是否为空 ...
- LinkedList 模拟栈和队列
LinkedList 比ArrayList 提供了更多的方法,其中有两个方法可以实现栈和队列的操作. removeFirst() 移除并返回此列表中的第一个元素. removeLast() 移除并返回 ...
- 【HDU - 1702 】ACboy needs your help again! (栈和队列,水题模拟)
题干: ACboy was kidnapped!! he miss his mother very much and is very scare now.You can't image how da ...
最新文章
- thinkphp5+远程代码执行_ThinkPHP5 5.0.23 远程代码执行漏洞
- Windows 10 开发日记(五)-- 当Binding遇到异步 -- 解决方案
- ICLR2020 | 谷歌最新研究:用“复合散度”量化模型合成泛化能力
- Eigen求解数学问题(二)
- 局域网网络风暴检测工具_二层网络结构和三层网络结构的对比
- mysql udf编译_MySql UDF 调用外部程序和系统命令
- Entity Framework Core 实现MySQL 的TimeStamp/RowVersion 并发控制
- Python高级网络编程系列之基础篇
- 【论文】基于特定实体的文本情感分类总结(PART III)
- ORA-16009: 远程归档日志目标必须为备用数据库
- centos7yum安装VirtualBox
- Feed back TFS 2017 RC upgrade status to product team in product group 2017.03.01
- error: exception handling disabled, use -fexceptions to enable
- HTTP知识点总结 - 转载
- writeup-passcode
- 颜宁:学术圈问题很多,也不分国籍,希望年轻一代守住底线
- 《大话数据结构》总结一下
- Multisim基础 直流电流源示例
- latex -Provide a separate sheet listing all figure captions.
- 蓝牙相关学习:4.1.BLE空口包结构