1.仅用队列结构实现栈结构

1.1 分析:

1、所有数先入data队列:

2、将前n-1个数入help队列,弹出最后一个数:

3、将help中的前n-2个数入data队列,弹出最后一个数:

4、重复2~3,即可按先入后出的顺序弹出所有元素。

1.2 代码实现

package Solution;
import java.util.LinkedList;
import java.util.Queue;class queueToStack{Queue<Integer> data;Queue<Integer> help;public queueToStack() {this.data=new LinkedList<Integer>();this.help=new LinkedList<Integer>();}public void push(int num) {data.add(num);}public Integer peek() {if (data.isEmpty()) {throw new RuntimeException("Stack is empty!");}while(data.size()>1)help.add(data.poll());int result=data.poll();help.add(result);//只返回不删除swap();return result;}public Integer pop() {if (data.isEmpty()) {throw new RuntimeException("Stack is empty!");}while(data.size()>1)help.add(data.poll());int result=data.poll();//返回带删除swap();return result;}public boolean isEmpty() {return data.isEmpty();}public void swap() {//改变引用Queue<Integer> temp=data;data=help;help=temp;}
}public class Queue_To_Stack {public static void main(String[] args) {queueToStack qts=new queueToStack();qts.push(1);qts.push(2);System.out.println(qts.pop());qts.push(3);System.out.println(qts.pop());System.out.println(qts.pop());qts.push(4);qts.push(5);System.out.println(qts.pop());}
}

运行结果:

注意:队列的先入先出!!!

2.仅用栈结构实现队列结构

2.1 分析

用两个栈:push栈,pop栈

  • push栈:用于入队列
  • pop栈:用于出队列

两种思想:

一种思想(倒的比较频繁):

要入队列时,都往push栈加;

出队列时,将push栈中的数据倒入pop栈中,从pop栈顶弹出一个元素;然后将剩余数据倒回到push栈中。

另一种思想:

push往pop倒数据,需满足:

  1. 要倒就把push中的数据倒空;
  2. 在pop栈中还有数据时,就不能倒

2.2 代码实现

package Solution;import java.util.Stack;class StackToQueue{Stack<Integer> pushStack;Stack<Integer> popStack;public StackToQueue(){this.pushStack=new Stack<Integer>();this.popStack=new Stack<Integer>();}public void push(int num) {pushStack.push(num);}public Integer peek() {if (pushStack.isEmpty()) {throw new RuntimeException("Queue is empty!");}while(!pushStack.isEmpty())popStack.push(pushStack.pop());int result=popStack.peek();while(!popStack.isEmpty())pushStack.push(popStack.pop());return result;}public Integer poll() {if (pushStack.isEmpty()) {throw new RuntimeException("Queue is empty!");}while(!pushStack.isEmpty())popStack.push(pushStack.pop());int result=popStack.pop();//弹出,少一个while(!popStack.isEmpty())pushStack.push(popStack.pop());return result;}
}
public class Stack_To_Queue {public static void main(String[] args) {StackToQueue stq=new StackToQueue();stq.push(1);stq.push(2);System.out.println(stq.poll());stq.push(3);System.out.println(stq.poll());System.out.println(stq.poll());stq.push(4);stq.push(5);System.out.println(stq.poll());}
}

运行结果:

算法练习day8——190326(队列实现栈、栈实现队列)相关推荐

  1. 算法练习day8——190326(猫狗队列、转圈打印矩阵、旋转正方形矩阵、反转单向双向链表、数N的加法组合)

    1.猫狗队列 [题目] 宠物. 狗和猫的类如下: public class Pet {private String type;public Pet(String type) {this.type = ...

  2. c语言编写队列元素逆置,数据结构与算法实验—利用栈逆置队列元素.doc

    数据结构与算法实验-利用栈逆置队列元素 利用栈逆置队列元素实验报告 通信1204班 谢崇赟 实验名称 利用堆栈将队列中的元素逆置 实验目的 会定义顺序栈和链栈的结点类型. 掌握栈的插入和删除结点在操作 ...

  3. 每日一题(33)——用两个栈实现一个队列的功能?要求给出算法和思路

    用两个栈实现一个队列的功能?要求给出算法和思路. 设2个栈为A,B, 一开始均为空. 入队: 将新元素push入栈A; 出队: (1)判断栈B是否为空: (2)如果不为空,则将栈B中最顶元素pop出: ...

  4. 算法图解:如何用两个栈实现一个队列?

    作者 | 王磊 来源 | Java中文社群(ID:javacn666) 转载请联系授权(微信ID:GG_Stone) 本文已收录至 https://github.com/vipstone/algori ...

  5. python:实现由伪栈表示的队列算法(附完整源码)

    python:实现由伪栈表示的队列算法 class Queue:def __init__(self):self.stack = []self.length = 0def __str__(self):p ...

  6. Java数据结构(1.1):数据结构入门+线性表、算法时间复杂度与空间复杂度、线性表、顺序表、单双链表实现、Java线性表、栈、队列、Java栈与队列。

    数据结构与算法入门 问题1:为什么要学习数据结构          如果说学习语文的最终目的是写小说的话,那么能不能在识字.组词.造句后就直接写小说了,肯定是不行的, 中间还有一个必经的阶段:就是写作 ...

  7. C++数据结构和算法2 栈 双端/队列 冒泡选择插入归并快排 二三分查找 二叉树 二叉搜索树 贪婪 分治 动态规划

    C++数据结构和算法2 栈 双端/队列 冒泡选择插入归并快排 二三分查找 二叉树 二叉搜索树 贪婪 分治 动态规划 博文末尾支持二维码赞赏哦 _ github 章3 Stack栈 和 队列Queue= ...

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

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

  9. 算法学习12: 单调队列和单调栈

    算法学习12: 单调队列和单调栈 单调队列 单调队列解决的问题: 窗口内最大/最小值的更新结构 单调队列的结构和操作 单调队列的应用 题目一: 生成窗口最大值数组[leetcode 239](http ...

最新文章

  1. 中删除某几列_算法--apriori 实战 (某零售企业的商品关联分析)
  2. CVPR2020 | 商汤-港中文等提出PV-RCNN:3D目标检测新网络
  3. IIS部署ASP.Net Core 502.5错误和解决
  4. 汇编 整数常量 实数常量 字符常量 字符串常量 保留字 标识符 伪指令 指令 nop指令
  5. Spring MVC 返回视图时添加的模型数据------POJO
  6. 如何基于Redis Replication设计并实现Redis-replicator?
  7. 【人物】徐磊:对用户驯养,只需要让用户记得你会给肉
  8. CentOS-Samba服务
  9. 提供呼叫中心服务器,呼叫中心系统方案
  10. php改变图片宽高,php缩放图片(根据宽高的等比例缩放)实例介绍
  11. 大会线上同步直播, 来不到现场也可以线上看直播,以及参会秘籍
  12. linux matplotlib 中文显示乱码
  13. jvm对类的加载、链接、初始化
  14. jQuery~函数封装记1
  15. 曲率曲线JAVA_DEM曲率计算
  16. 韩立刚老师《计算机网络》笔记2
  17. python docx官网_Python操作docx文档
  18. 网络流量监控iptraf
  19. 雪人(snowman)
  20. java 图片拼接_Java实现图片拼接

热门文章

  1. javaScript的使用(5)DOM事件
  2. LVS+DR源码安装
  3. 开源.net开发平台SharpDevelop挑战VS2008
  4. 中国为何难学欧盟反垄断
  5. asp.net中的MD5加密
  6. 前端趋势榜:上周最 yyds 的 10 大前端项目 - 211101
  7. k8s kustomize 简明教程:安装 kustomization.yml常用字段解读
  8. docker-compose部署nginx,挂载外置配置文件及项目
  9. Linux DNS服务配置与管理详解
  10. 【收藏】k8s: pod has unbound PersistentVolumeClaims问题解决