转载自  漫画:如何用栈实现队列

栈的特点是先入后出,出入元素都是在同一端(栈顶):

入栈:

出栈:

队列的特点是先入先出,出入元素是在不同的两端(队头和队尾):

入队:

出队:

既然我们拥有两个栈,那么我们可以让其中一个栈作为队列的入口,负责插入新元素;另一个栈作为队列的出口,负责移除老元素。

队列的主要操作无非有两个:入队和出队。

在模拟入队操作时,每一个新元素都被压入到栈A当中。

让元素1 “入队”:

让元素2 “入队”:

让元素3 “入队”:

这时候,我们希望最先“入队”的元素1“出队”,需要怎么做呢?

让栈A中的所有元素按顺序出栈,再按照出栈顺序压入栈B。这样一来,元素从栈A弹出并压入栈B的顺序是3,2,1,和当初进入栈A的顺序1,2,3是相反的:

此时让元素1 “出队”,也就是让元素1从栈B弹出:

让元素2 “出队”:

让元素4 “入队”:

此时的出队操作仍然从栈B弹出元素。

让元素3 “出队”:

让元素4 “出队”:

private Stack<Integer> stackA = new Stack<Integer>();
private Stack<Integer> stackB = new Stack<Integer>();/**
* 入队操作
* @param element  入队的元素
*/
public void enQueue(int element) {stackA.push(element);
}/**
* 出队操作
*/
public Integer deQueue() {if(stackB.isEmpty()){if(stackA.isEmpty()){return null;}transfer();}return stackB.pop();
}/**
* 栈A元素转移到栈B
*/
private void transfer(){while (!stackA.isEmpty()){stackB.push(stackA.pop());}
}public static void main(String[] args) throws Exception {StackQueue stackQueue = new StackQueue();stackQueue.enQueue(1);stackQueue.enQueue(2);stackQueue.enQueue(3);System.out.println(stackQueue.deQueue());System.out.println(stackQueue.deQueue());stackQueue.enQueue(4);System.out.println(stackQueue.deQueue());System.out.println(stackQueue.deQueue());}

漫画:如何用栈实现队列相关推荐

  1. 栈与队列的对决:如何用栈实现队列?

    本篇博客会讲解力扣"232. 用栈实现队列"的解题思路,这是题目链接. 先来审题: 以下是输出示例: 以下是提示和进阶: 栈是一种后进先出的数据结构,而队列是一种先进先出的数据结构 ...

  2. 漫画:如何用栈实现队列?

    -----  第二天  ----- ------------ 栈的特点是先入后出,出入元素都是在同一端(栈顶): 入栈: 出栈: 队列的特点是先入先出,出入元素是在不同的两端(队头和队尾): 入队: ...

  3. java 栈和队列实现迷宫代码_算法图解:如何用两个栈实现一个队列?

    本文已收录至 https://github.com/vipstone/algorithm <算法图解>系列. 队列和栈是计算机中两个非常重要的数据结构,经过前面的学习(<队列> ...

  4. 数据结构:栈和列之如何用两个队列实现一个栈?两个栈实现一个队列?

    1.栈和队列分析 栈是一种特殊的线性表.其特殊性在于限定插入和删除数据元素的操作只能在线性表的一端进行 队列(Queue)也是一种运算受限的线性表,它的运算限制与栈不同,是两头都有限制,插入只能在表的 ...

  5. 第十章 基本数据结构——栈和队列

    摘要 本章介绍了几种基本的数据结构,包括栈.队列.链表以及有根树,讨论了使用指针的简单数据结构来表示动态集合.本章的内容对于学过数据结构的人来说,没有什么难处,简单的总结一下. 1.栈和队列 栈和队列 ...

  6. 八、【栈和队列】栈的应用

    栈的应用 栈具有先进后出的特点,这个特点在解决某些问题时是很有效的.本节我们来看几个栈的常见应用以及栈结构适合解决的问题类型. 1 数制转换 我们日常生活中用的是十进制,而计算机中绝大多数时候是二进制 ...

  7. 左神算法课笔记(二):链表、栈和队列、递归Master公式、哈希表、有序表

    单向链表 双向链表 单链表.双链表最简单的面试题 1.单链表和双链表如何反转 package class02;import java.util.ArrayList;public class Code0 ...

  8. 算法面试:栈实现队列的方案

    声明:码字不易,转载请注明出处,欢迎文章下方讨论交流. 前言:Java数据结构与算法专题会不定时更新,欢迎各位读者监督.本篇文章介绍一个有趣的问题:用两个栈实现一个队列.这道题来自互联网公司的算法面试 ...

  9. 基本数据结构 - 栈和队列

    摘要 本章介绍了几种基本的数据结构,包括栈.队列.链表以及有根树,讨论了使用指针的简单数据结构来表示动态集合.本章的内容对于学过数据结构的人来说,没有什么难处,简单的总结一下. 1.栈和队列 栈和队列 ...

最新文章

  1. jQuery 淡入淡出
  2. NB-IOT来了,物联网时代才真正来临
  3. 【 Notes 】WLLS Algorithm of TOA - Based Positioning (include the two - step WLS estimator)
  4. 医疗人工智能会替代医生吗
  5. Trie Tree 实现中文分词器
  6. 吴涛 :低延迟传输协议和新Codec将成为热点
  7. YodaOS: 一个属于 Node.js 社区的操作系统
  8. java中常用的String方法
  9. android 仿QQ手机版
  10. 洞穴辐射(radiation)
  11. GrADS读取.grb2文件记录
  12. python爬携程_Python crawler:对携程的航班数据进行抓取,python,爬虫,爬取
  13. win10专业版有必要吗_Win10有哪些版本 Win10各版本有什么区别【区别介绍】
  14. 〖小狼毫〗小狼毫使用心得分享
  15. Python---excel筛选
  16. Eclipse编写代码时出现The word 'localhost' is not correctly spelled.禁告
  17. 瞧,工程师绘图最佳实践!
  18. 基于SSM的Web网页聊天室系统设计与实现 毕业论文+项目源码及数据库文件、
  19. 网络带宽和质量测试小工具.iPerf3
  20. 用html表格形式制作个人信息,CSS写的简单个人信息登记表格示例

热门文章

  1. leetcode454. 四数相加 II(思路+详解)
  2. 81. 搜索旋转排序数组 II(014)二分查找+思路+详解+二种做法
  3. mysql多实例复制,Mysql实例使用Rotate Master实现MySQL 多主复制的实现方法
  4. 非常实用的word文本括号匹配是否正确的code,可按照此思路扩展到python处理大批量文本文件的检错中,非常实用!!!
  5. HDU - 6071 Lazy Running 同余最短路 + 分层
  6. House Building HDU - 5538
  7. Fake Maxpooling(2020多校第二场F)
  8. hdu 1525 Euclid‘s Game
  9. 2021 CSP-S 游记
  10. 欢乐纪中某A组赛【2019.7.11】