漫画:如何用栈实现队列?
————— 第二天 —————
————————————
栈的特点是先入后出,出入元素都是在同一端(栈顶):
入栈:
出栈:
队列的特点是先入先出,出入元素是在不同的两端(队头和队尾):
入队:
出队:
既然我们拥有两个栈,那么我们可以让其中一个栈作为队列的入口,负责插入新元素;另一个栈作为队列的出口,负责移除老元素。
队列的主要操作无非有两个:入队和出队。
在模拟入队操作时,每一个新元素都被压入到栈 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());
}
声明:本文为作者投稿,首发于个人公众号程序员小灰,版权归其所有。
热 文 推 荐
☞ CSDN 创始人蒋涛:AI 定义的开发者时代
☞ 你真的知道如何在 GitHub 上高效搜索开源项目吗?
☞ 程序员不努力,和咸鱼有什么分别?
☞“对不起,你的离职是我的错!”
☞ Gartner的预言:通向混合IT之旅
☞ 阿里“菜鸟”AI?
☞ 刚刚!华为又被美国盯上了!
☞ 心疼!能为程序员男友做些什么吗?
print_r('点个好看吧!');
var_dump('点个好看吧!');
NSLog(@"点个好看吧!");
System.out.println("点个好看吧!");
console.log("点个好看吧!");
print("点个好看吧!");
printf("点个好看吧!");
cout << "点个好看吧!" << endl;
Console.WriteLine("点个好看吧!");
fmt.Println("点个好看吧!");
Response.Write("点个好看吧!");
alert("点个好看吧!")
echo "点个好看吧!"
点击“阅读原文”,打开 CSDN App 阅读更贴心!
喜欢就点击“好看”吧
漫画:如何用栈实现队列?相关推荐
- 漫画:如何用栈实现队列
转载自 漫画:如何用栈实现队列 栈的特点是先入后出,出入元素都是在同一端(栈顶): 入栈: 出栈: 队列的特点是先入先出,出入元素是在不同的两端(队头和队尾): 入队: 出队: 既然我们拥有两个栈, ...
- 栈与队列的对决:如何用栈实现队列?
本篇博客会讲解力扣"232. 用栈实现队列"的解题思路,这是题目链接. 先来审题: 以下是输出示例: 以下是提示和进阶: 栈是一种后进先出的数据结构,而队列是一种先进先出的数据结构 ...
- java 栈和队列实现迷宫代码_算法图解:如何用两个栈实现一个队列?
本文已收录至 https://github.com/vipstone/algorithm <算法图解>系列. 队列和栈是计算机中两个非常重要的数据结构,经过前面的学习(<队列> ...
- 数据结构:栈和列之如何用两个队列实现一个栈?两个栈实现一个队列?
1.栈和队列分析 栈是一种特殊的线性表.其特殊性在于限定插入和删除数据元素的操作只能在线性表的一端进行 队列(Queue)也是一种运算受限的线性表,它的运算限制与栈不同,是两头都有限制,插入只能在表的 ...
- 第十章 基本数据结构——栈和队列
摘要 本章介绍了几种基本的数据结构,包括栈.队列.链表以及有根树,讨论了使用指针的简单数据结构来表示动态集合.本章的内容对于学过数据结构的人来说,没有什么难处,简单的总结一下. 1.栈和队列 栈和队列 ...
- 八、【栈和队列】栈的应用
栈的应用 栈具有先进后出的特点,这个特点在解决某些问题时是很有效的.本节我们来看几个栈的常见应用以及栈结构适合解决的问题类型. 1 数制转换 我们日常生活中用的是十进制,而计算机中绝大多数时候是二进制 ...
- 左神算法课笔记(二):链表、栈和队列、递归Master公式、哈希表、有序表
单向链表 双向链表 单链表.双链表最简单的面试题 1.单链表和双链表如何反转 package class02;import java.util.ArrayList;public class Code0 ...
- 算法面试:栈实现队列的方案
声明:码字不易,转载请注明出处,欢迎文章下方讨论交流. 前言:Java数据结构与算法专题会不定时更新,欢迎各位读者监督.本篇文章介绍一个有趣的问题:用两个栈实现一个队列.这道题来自互联网公司的算法面试 ...
- 基本数据结构 - 栈和队列
摘要 本章介绍了几种基本的数据结构,包括栈.队列.链表以及有根树,讨论了使用指针的简单数据结构来表示动态集合.本章的内容对于学过数据结构的人来说,没有什么难处,简单的总结一下. 1.栈和队列 栈和队列 ...
最新文章
- yii2框架随笔29
- ECCV2020优秀论文汇总|涉及点云处理、3D检测识别、三维重建、立体视觉、姿态估计、深度估计、SFM等方向...
- Android Activity 和 ViewGroup中事件触发和传递机制
- 学习CSS 不错网址
- Elasticsearch5.X Mapping万能模板
- SAP Spartacus 电商云 UI Shipping Method 在单元测试环境下没有显示的问题
- Django讲课笔记10:使用QuerySet删除和查询数据表
- cannot enable both sham-link state-change interface traps
- Python3 从零单排27_锁信号量Event定时器
- Java中interface接口与abstract class抽象类的区别
- python生成公共包(SDK)
- STM32G474 CANFD 用例详解
- matlab描点连线画图
- keil(MDK) 5官方下载教程
- 离散数学学习笔记——第七讲——特殊关系和函数(5.4 哈斯图和特殊元素)
- 【前缀树】C++ 数据结构 字典树
- GraphQL和RESTful的区别
- Java SE基础(十六)集合
- matlab的输入输出
- 快排和归并排序哪个更快
热门文章
- android intent跳转声音,android intent 跳转
- 《统计学习方法》—— k近邻方法、kd树以及python3实现
- 电子计算机之争的想法,模拟意识的通俗讲解
- 3认证老外主任_首批18款App认证名单公布 未来将开展数据安全管理认证
- linux系统mysql创建表,Linux系统下手动新建数据库
- Python菜鸟入门:day16编程学习
- 字节跳动联邦学习平台通过中国信通院首批评估 数据安全能力得到专业验证
- AWS中国区同时上线两款新产品,补齐存储服务“全家桶”!
- 一张图搞懂 Redis 缓存雪崩、缓存穿透、缓存击穿
- 终极解密!输入网址按回车到底发生了什么?