教你如何用两个栈实现一个队列
一,实现思路
1,首先准备两个栈,栈A与栈B
2,栈A专门用来完成入队列操作,栈B专门用来出队列与取队首元素操作
3,每次入队列操作时,首先得判断B栈是否为空,不空则将B栈元素全都依次入A栈,最后继续入新元素(即将要入栈元素添加到栈A)
4,每次出队列与取队首元素操作时,将A栈中的元素依次入B栈,出队列即取出B栈中的元素,取队首元素即取B栈栈顶元素即可
注意:如果不够清楚思路,也可阅读代码,清晰的注释总会让你理解
二,实现代码
import java.util.Stack;public class MyQueueByStack {//先创建两个栈private Stack<Integer> A = new Stack<>(); //用来入队列private Stack<Integer> B = new Stack<>(); //用来出队列public void push(int val){ //入队列// 如果栈B不为空,先将B中的元素倒腾到栈Awhile(!B.isEmpty()){int tmp = B.pop();A.push(tmp);}//接着入栈只需将元素放入栈AA.push(val);}public Integer pop(){ //出队列if(empty()){return null; //如果队列为空(即AB栈都为空)直接返回null}while(!A.isEmpty()){ //当A栈不为空,将A中的元素倒腾到Bint tmp = A.pop();B.push(tmp);}return B.pop(); //直接返回B的出栈元素,即为出队列的元素}public Integer peek(){ //取队首元素if(empty()){return null; //如果队列为空(即AB栈都为空)直接返回null}while(!A.isEmpty()){ //当A栈不为空,将A中的元素倒腾到Bint tmp = A.pop();B.push(tmp);}return B.peek(); //直接返回B的栈顶元素,即为出队列的栈顶元素}public boolean empty(){return A.isEmpty() && B.isEmpty(); //如果AB栈都为空则表示队列为空}public static void main(String[] args) {MyQueueByStack queue = new MyQueueByStack();queue.push(1);queue.push(2);queue.push(3);queue.push(4);System.out.println(queue.peek());System.out.println(queue.pop());System.out.println(queue.pop());System.out.println(queue.pop());System.out.println(queue.pop());}
}
测试结果:
教你如何用两个栈实现一个队列相关推荐
- 算法图解:如何用两个栈实现一个队列?
作者 | 王磊 来源 | Java中文社群(ID:javacn666) 转载请联系授权(微信ID:GG_Stone) 本文已收录至 https://github.com/vipstone/algori ...
- java 栈和队列实现迷宫代码_算法图解:如何用两个栈实现一个队列?
本文已收录至 https://github.com/vipstone/algorithm <算法图解>系列. 队列和栈是计算机中两个非常重要的数据结构,经过前面的学习(<队列> ...
- 数据结构:栈和列之如何用两个队列实现一个栈?两个栈实现一个队列?
1.栈和队列分析 栈是一种特殊的线性表.其特殊性在于限定插入和删除数据元素的操作只能在线性表的一端进行 队列(Queue)也是一种运算受限的线性表,它的运算限制与栈不同,是两头都有限制,插入只能在表的 ...
- 多态指针访问虚函数不能被继承的类快速排序N皇后问题插入排序堆排序merge归并排序栈上生成对象两个栈实现一个队列...
多态 /*1. 要想实现覆盖(重写)父类必须声明为virtual,子类可以不声明为virtual.-->FunB()2. 派生类重写基类的虚函数实现多态,要求函数名.参数列表.返回值完全相同.( ...
- 【剑指offer】用两个栈实现一个队列
题目:两个栈实现一个队列. 栈的特点:先进后出,队列的特点是先进先出 思路:stack1放入数据:pop时,先判断stack2是否为空,如果不为空,直接pop,如果空,则push(stack1.pop ...
- 剑指offer五:两个栈实现一个队列
题目描述 用两个栈来实现一个队列,完成队列的Push和Pop操作. 队列中的元素为int类型. package com.jianzhioffer;import java.util.Stack;publ ...
- 两个栈实现一个队列,两个队列实现一个栈
题目:用两个栈实现一个队列,用两个队列实现一个栈. 首先要了解栈和队列这两种数据结构各自的特点,栈是一种后入先出(Last In First Out,LIFO)的数据结构,队列是一种先进先出(Firs ...
- python 用两个栈实现一个队列
| 两个栈实现队列 用两个栈实现一个队列.队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能.(若队列中没有元素 ...
- java实现-两个栈实现一个队列和两个队列实现一个栈
1.两个栈实现一个队列 思路:压入元素直接入stack1,删除元素先判断stack2中是否为空,如果不为空直接弹出:为空则将stack1中的元素取出压入 stack2中再弹出. 代码: import ...
- python ——两个队列实现一个栈两个栈实现一个队列
1.两个队列实现一个栈 进栈:元素入队列A 出栈:判断如果队列A只有一个元素,则直接出队.否则,把队A中的元素出队并入队B,直到队A中只有一个元素,再直接出队.为了下一次继续操作,互换队A和队B. p ...
最新文章
- 推荐系统+覆盖率(coverage)
- cass插件_南方CASS专题系列,全套教程+视频讲解+插件汇总,全部打包速带走
- 匿名发差评被判赔3272元,北京研究生遭遇冲上热搜,涉事机构回应:暂不澄清...
- IC/FPGA笔试/面试题分析(九)关于FIFO最小深度计算的问题
- mysql 怎么导入函数_mysql导入导出包括函数或者存储过程_MySQL
- 【NLP】经典分类模型朴素贝叶斯解读
- 用jQuery实现弹出窗口/弹出div层
- 九九乘法表编码以及思路
- FineReport(二)帆软报表图表的
- 华为发布全新一代OceanStor存储Pacific系列,打造海量数据存储新标杆
- 第04章:MongoDB基本概念
- linux系统时间与网络时间不同步
- spring学习笔记 (6)使用mybatis操作数据库增删改查
- 第四章 Sysrepo连接与会话
- html编辑器如何设置滚动字幕,使用Axure RP为网页添加滚动字幕的具体操作步骤
- 怎么用思维导图做会议纪要?MindNow来教你
- 你好!Docker【概念+源码+保姆式教程】
- JQuery制作飘落的树叶动画效果
- Mac book air在浏览器中显示flash过期问题
- 为什么说SQL语句中使用IN性能不高?