教你如何用两个队列实现一个栈
一,实现方法
1.具体思路:
1.准备两个队列AB
2.A用来执行入队列(每次入队列时只要放入A即可)
3.出栈操作时,在A中元素保留一个的情况下将A中元素依次入队列B,最后直接让A中的剩下的那一个元素出队列即可,执行完,交换AB队列(方便下次出栈)
4,取栈顶元素操作时,和出栈操作一样,不过访问完A的唯一元素后,再存放到B(保持数据的完整性),最后交换AB即可
2,图示
二,代码实现
public class MyStackByQueue {Queue<Integer> A = new LinkedList<>();Queue<Integer> B = new LinkedList<>();public void push(int val){ //入栈时将数据放入队列AA.offer(val);}public Integer pop(){ //出栈if(isEmpty()){ //如果队列为空即返回nullreturn null;}while(A.size() > 1){ //当队列A的元素个数大于一,就将元素挨个出队列A放入队列Integer temp = A.poll();B.offer(temp);}//当循环结束时,栈队列A就剩一个元素int rec = A.poll(); //保存这个元素,并出队列swap(); //交换AB队列,便于下次操作(无论是入栈出栈取栈顶元素都保证了是A中元素往B中倒腾)return rec; //返回出栈元素,}public void swap() { //交换AB队列Queue<Integer> temp = A;A = B;B = temp;}public Integer peek(){ //取栈顶元素if(isEmpty()){ //如果队列为空即返回nullreturn null;}while(A.size() > 1){ //当队列A的元素个数大于一,就将元素挨个出队列A放入队列Integer temp = A.poll();B.offer(temp);}//当循环结束时,栈队列A就剩一个元素int rec = A.poll(); //保存这个元素,并出队列B.offer(rec); //将这个元素再放入队列B(保持栈的元素完整)swap(); //交换AB队列,便于下次操作(无论是入栈出栈取栈顶元素都保证了是A中元素往B中倒腾)return rec; //返回出栈元素,}public boolean isEmpty(){ //判断栈是否为空return A.isEmpty() ; //只要判断A队列是否为空}
教你如何用两个队列实现一个栈相关推荐
- 数据结构:栈和列之如何用两个队列实现一个栈?两个栈实现一个队列?
1.栈和队列分析 栈是一种特殊的线性表.其特殊性在于限定插入和删除数据元素的操作只能在线性表的一端进行 队列(Queue)也是一种运算受限的线性表,它的运算限制与栈不同,是两头都有限制,插入只能在表的 ...
- 两个栈实现一个队列,两个队列实现一个栈
题目:用两个栈实现一个队列,用两个队列实现一个栈. 首先要了解栈和队列这两种数据结构各自的特点,栈是一种后入先出(Last In First Out,LIFO)的数据结构,队列是一种先进先出(Firs ...
- java实现-两个栈实现一个队列和两个队列实现一个栈
1.两个栈实现一个队列 思路:压入元素直接入stack1,删除元素先判断stack2中是否为空,如果不为空直接弹出:为空则将stack1中的元素取出压入 stack2中再弹出. 代码: import ...
- python ——两个队列实现一个栈两个栈实现一个队列
1.两个队列实现一个栈 进栈:元素入队列A 出栈:判断如果队列A只有一个元素,则直接出队.否则,把队A中的元素出队并入队B,直到队A中只有一个元素,再直接出队.为了下一次继续操作,互换队A和队B. p ...
- 两个栈实现一个队列与两个队列实现一个栈
http://blog.csdn.net/z84616995z/article/details/19204529 两个栈实现一个队列: 原理方法:用一个栈为主栈,一个栈为辅助栈存放临时元素. 入队:将 ...
- 两个栈实现一个队列/两个队列实现一个栈
http://blog.csdn.net/sinat_30472685/article/details/70157227 1两个栈实现一个队列 1.原理分析: 队列的主要操作有两个:入队操作和出队操作 ...
- C/C++面试题—使用STL两个队列实现一个栈
题目介绍 使用STL中的两个队列实现一个栈,实现栈的top.pop.push.clear等操作. 思路分析 思路和使用2个栈实现一个队列是相通的,用一个队列queue1容器用来 压栈,出栈的时候判断q ...
- java 栈和队列实现迷宫代码_使用两个队列实现一个栈
两个队列实现一个栈 栈的特点是后进先出,队列的特点是先进先出.使用两个队列模拟栈,实现栈的push,pop,top,empty 操作. 假设队列中均为数字,其中队列q1为操作队列,q2为辅助队列. p ...
- 【c语言】两个队列实现一个栈
两个队列实现一个栈 核心思想:模拟出栈的后进先出操作 创建queue1和queue2,入栈时选择一个非空队列执行入队列操作(若两个队列都为空,则随机选择一个队列),出栈时需要先从非空队列queue1把 ...
- 【C++】两个队列实现一个栈
两个队列实现一个栈的思想:用_PushQ1队列作为push数据的队列,用_TmpQ2队列暂存数据 1.只要是对栈进行push操作,就将数据push入_PushQ1队列中. 2.要实现栈的pop操作,就 ...
最新文章
- 【飞书成长日记】飞书功能发展路径
- 解散了地图接口讨论群
- 深度探索C++ 对象模型(6)-Data member的存取
- ubuntu下使用apt安装mysql_Ubuntu下通过apt包管理安装mysql
- PAT1098【插入排序+堆排序】
- LeetCode Algorithm 589. N 叉树的前序遍历
- mysql 主键倒序查询速度慢_一亿条数据order by主键降序速度很慢
- 深度学习-自动并行计算
- java基础知识点_JAVA基础知识
- android so文件崩溃,android 7.0 因为.so文件而崩溃事件解决
- 玩转Docker镜像
- 网页制作中点一张图片变成图片浏览式_网页不会做,那是画册看得少(上)
- 参加集成电路EDA设计精英挑战赛的体会
- SVN代码更新群发邮件通知
- rest-framework-视图
- python后端和爬虫_【后端开发】python爬虫难学吗
- SeetaFace6人脸库体验(全部开源)
- MATLAB代码:基于分布式优化的多产消者非合作博弈能量共享
- 如何快速撰写/总结国内外研究现状?
- python外贸应用_Python脚本+Sublime免费查询阿里巴巴国际站产品排名