首先需要使用上篇文章(用数组实现栈和队列)中的栈和队列两个类

1.栈实现队列:思路是有两个栈,一个用来放数据(数据栈),一个用来辅助(辅助栈)。数据添加时,会依次压人栈,取数据时肯定会取栈顶元素,但我们想模拟队列的先进先出,所以就得取栈底元素,那么辅助栈就派上用场了,把数据栈的元素依次弹出到辅助栈,但保留最后一个元素,最后数据栈就剩下了最后一个元素,直接把元素返回,这时数据栈已经没有了数据。最后呢,把辅助栈的元素依次压人数据栈,这样,我们成功取到了栈底元素。

代码如下:

package com.sxt.test.java;public class Stack2Queue {/*** 用栈的入栈和出栈* 来实现队列的入队和出队*  stack1是入栈的,stack2是出栈的。入队列:直接压入stack1即可出队列:如果stack2不为空,把stack2中的栈顶元素直接弹出;否则,把stack1的所有元素全部弹出压入stack2中,再弹出stack2的栈顶元素* */Stack stack1 = new Stack();Stack stack2 = new Stack();public void add(Object o) {stack1.push(o);}public Object poll() {Object o = null;if(stack2.length()==0) {//把stack1的数据放入stack2,留下最后一个数据while(stack1.length()>1) {stack2.push(stack1.pop());}if(stack1.length()==1) {//把stack1的留下的那个数据返回出去o = stack1.pop();}}else {o = stack2.pop();}return o;}public int length() {return stack1.length()+stack2.length();}}

2.队列实现栈

思路同上:有数据队列和辅助队列,模拟栈的先进后出,队列是队尾进队头出,也就是说每次取值要取队列的队尾元素,数据队列出队到辅助队列,留下最后一个元素返回,辅助队列再把元素出队到数据队列

代码如下:

package com.sxt.test.java;public class Queue2Stack {/*** 用队列的入队和出队* 来实现栈的入栈和出栈* */Queue queue1 = new Queue();//主要存放数据Queue queue2 = new Queue();//辅助public void push(Object o) {queue1.add(o);}public Object pop() {Object o = null;while(queue1.length()>1) {queue2.add(queue1.poll());}if(queue1.length()==1) {o = queue1.poll();while(queue2.length()>0) {queue1.add(queue2.poll());}}return o;}public int length() {return queue1.length();}}

3.测试类

/*** 用两个栈实现队列* */Stack2Queue stack2Queue = new Stack2Queue();stack2Queue.add("a");stack2Queue.add("b");stack2Queue.add("c");stack2Queue.add("d");stack2Queue.add("e");while(stack2Queue.length()>0) {System.out.println(stack2Queue.poll());}/*** 用两个队列实现栈* */Queue2Stack queue2Stack = new Queue2Stack();queue2Stack.push("a");queue2Stack.push("c");queue2Stack.pop();queue2Stack.push("d");queue2Stack.push("e");queue2Stack.push("f");queue2Stack.push("g");queue2Stack.push("h");while(queue2Stack.length()>0) {System.out.println(queue2Stack.pop());}

转载于:https://www.cnblogs.com/wwzyy/p/5507942.html

用栈实现队列和用队列实现栈相关推荐

  1. 在java的实现栈的插入数据_Java实现数据结构栈stack和队列Queue

    回顾JDK提供的集合类 容器(集合)框架如下: 集合类存放于java.util包中.集合类存放的都是对象的引用,而非对象本身. 集合类型主要有3种:set(集).list(列表)和map(映射). C ...

  2. JAVA实现用两个栈来实现一个队列,完成队列的Push和Pop操作(《剑指offer》)

    最近在刷<剑指offer>里的编程题,但是网上关于<剑指offer>的解答多半是C或者C++的,而且官方(作者)也是在用C++进行讲解,这里自己用java写了一些题目的解答代码 ...

  3. 用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。...

    题目描述 用两个栈来实现一个队列,完成队列的Push和Pop操作. 队列中的元素为int类型. import java.util.Stack; public class Solution {      ...

  4. 算法:用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。...

    算法:用两个栈来实现一个队列,完成队列的Push和Pop操作. 队列中的元素为int类型.<剑指offer> 利用栈来进行操作,代码注释写的比较清楚:首先判断两个栈是否是空的:其次当栈二 ...

  5. 栈和队列之用2个栈实现一个队列

    import java.util.Stack;/*** @author chenyu* 题目:编写一个类,用2个栈实现一个队列,支持队列的基本操作(add poll peek)* 思路:栈的特点是先进 ...

  6. java 栈 队列 接口_Java队列接口

    java 栈 队列 接口 介绍: 队列是FIFO(先进先出)抽象数据类型(ADT). 换句话说,按插入顺序将元素删除. java.util.Queue是Java 中的接口,并且从java.util.C ...

  7. 复习栈和队列,详解最小栈,栈的弹出压入序列,逆波兰表达式求值

    栈和队列的概念 栈:吃进去吐出来 对列:吃进去拉出来 数据结构中的栈和内存中的区别 数据结构中的栈具有后进先出的特性,而内存中的栈是一个内存空间,只不过这个内存空间具与数据结构的栈具有相同的特性. 栈 ...

  8. 两个栈实现一个队列/两个队列实现一个栈

    http://blog.csdn.net/sinat_30472685/article/details/70157227 1两个栈实现一个队列 1.原理分析: 队列的主要操作有两个:入队操作和出队操作 ...

  9. 计算机二级循环队列知识点,考点!计算机二级考试公共基础知识冲刺复习笔记:栈、队列和循环队列...

    小编所收集到的相关计算机二级考试公共基础知识冲刺复习笔记:栈.队列和循环队列的资料 大家要认真阅读哦! 1.栈(Stack)又称堆栈. (1)栈是一种运算受限的线性表,其限制是仅允许在表的一端进行插入 ...

最新文章

  1. mysql 按条件导出数据_mysql命令行按任意查询条件导出指定数据
  2. ToString() 格式化字符串总结
  3. 笔记本电脑如何强制关机_笔记本按电源按钮不能关机只是关闭屏幕的解决办法...
  4. 现在大厂面试,也太太太太太难了吧!
  5. c语言作业统计字符,C语言统计字符数(示例代码)
  6. Asp.Net的性能问题
  7. visio画图-去掉visio中多余的连接点
  8. 人型自走输入法(网页日语输入法)
  9. 【PyTorch实战】用PyTorch实现基于神经网络的图像风格迁移
  10. 怎样批量处理编辑图片?这3个方法你一定要会
  11. Matlab求四面体体积
  12. 制作游戏辅助/外挂违法吗?
  13. BigDecimal实现加减乘除
  14. 如何做网线水晶头?(笔记)
  15. mysql SELECT/UPDATE command denied to user 'root'@'localhost' for table 'XXX' 报错1142处理
  16. C++ 设计模式 建造者模式(复杂对象的构建与其表示分离)肯德基不同烧鸡的制作过程
  17. Ls-Dyna 软件简介 (1)
  18. 如何用 R 创作古诗
  19. 评测5款国内外免费远控,谁是最好用第一名?
  20. SQL SERVER插入数据操作

热门文章

  1. Android Fragment 深度解析
  2. golang中的WaitGroup
  3. 常考数据结构与算法:数组中未出现的最小正整数
  4. 设计模式:KISS、YAGNI、DRY 原则,迪米特法则(LOD)
  5. spring boot三:spring boot的hello, world
  6. BROCADE使用小技巧
  7. 数据库相关的系统巡检参考项
  8. chrmoe debug
  9. WIN 7下绑定网关MAC地址
  10. 最大点权独立集---入门