import java.util.Stack;

 /**
* 问题:用两个Stack来实现一个Queue;
* 方法:栈的特点是先进后出;而队列的特点是先进先出;
* 用两个栈正好能把顺序调过来;
* 一个栈,作为压入栈,在压入数据时,只往这个栈里压入,记作:stackPush;
* 一个栈 ,作为弹出栈,在弹出数据时,只从这个栈里弹出,记作:stackPop;
*
*/
public class TwoStackQueue {
private Stack<Integer> stackPush;
private Stack<Integer> stackPop; public TwoStackQueue(){
this.stackPush = new Stack<Integer>();
this.stackPop = new Stack<Integer>();
} //向队列中添加元素;
public void add(int pushInt) {
stackPush.push(pushInt);
} //从队列中删除元素;
public int poll() {
if(stackPop.empty() && stackPush.empty()) {
throw new RuntimeException("Queue is empty!");
} else if(stackPop.empty()) {
while(!stackPush.empty()) {
stackPop.push(stackPush.pop());
}
}
return stackPop.pop();
} //得到位于队头位置元素的值;
public int peek() {
if(stackPop.empty() && stackPush.empty()) {
throw new RuntimeException("Queue is empty!");
} else if(stackPop.empty()) {
while(!stackPush.empty()) {
stackPop.push(stackPush.pop());
}
}
return stackPop.peek(); } //测试程序
public static void main(String[] args) {
TwoStackQueue tsq = new TwoStackQueue();
int[] a = {1, 2, 3, 4, 5, 6, 7};
for(int i: a){
tsq.add(i);
} for(int j=0; j<a.length; j++) {
int num = tsq.peek();
tsq.poll();
System.out.println(num);
}
} }

用两个Stack来实现一个Queue的更多相关文章

  1. 两个stack实现一个queue

    package com.hzins.suanfa; import java.util.Stack; /** * 两个stack实现一个queue * @author Administrator * * ...

  2. java基础编程——用两个栈来实现一个队列

    题目描述 用两个栈来实现一个队列,完成队列的Push和Pop操作. 队列中的元素为int类型. 题目代码 /** * <分析>: * 入队:将元素进栈A * 出队:判断栈B是否为空, * ...

  3. 两个栈来实现一个队列的C++代码

    利用两个栈来实现一个队列, 这个问题非经常见.  最关键的是要有好的思路, 至于实现, 那是非常easy的事情了. 在本文中, 也想说说自己的思路, 可是. 我认为用代码来表述思路更符合我的习惯. 也 ...

  4. 面试题9-用两个栈来实现一个队列,完成队列的Push和Pop操作

    题目 用两个栈来实现一个队列,完成队列的Push和Pop操作. 队列中的元素为int类型. 思路: 一个栈压入元素,而另一个栈作为缓冲,将栈1的元素出栈后压入栈2中 代码 import java.ut ...

  5. Swift处理堆栈问题——给定两组序列,其中一个序列表示栈的push 顺序,判断另一个序列有没有可能是对应的pop 顺序

    题目:输入两个整数序列.其中一个序列表示栈的push 顺序,判断另一个序列有没有可能是对应的pop 顺序.为了简单起见,我们假设push 序列的任意两个整数都是不相等的.比如输入的push 序列是1. ...

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

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

  7. stack堆栈容器、queue队列容器和priority_queue优先队列容器(常用的方法对比与总结)

    stack堆栈是一个后进先出的线性表,插入和删除元素都在表的一端进行. stack堆栈的使用方法: 采用push()方法将元素入栈: 采用pop()方法将元素出栈: 采用top()方法访问栈顶元素: ...

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

    1. 题目描述 用两个栈来实现一个队列,完成队列的Push和Pop操作. 队列中的元素为int类型. 2. 思想 (1)栈的特点是先进后出,而队列的特点是先进先出: (2)因此,入队列的情况和入栈的情 ...

  9. ----------jqery和js如何判断checkbox是否选中 --------两个单选按钮如何选一个,且用jquery获取被选的值

    jqery和js如何判断checkbox是否选中 jquery: <div id="divId" class="divTable"> <div ...

随机推荐

  1. PKU 1003解题

    首先庆祝一下,今天连A了3题.感觉后面这题太简单了.. 由于英文不好 ,找了个翻译: 若将一叠卡片放在一张桌子的边缘,你能放多远?如果你有一张卡片,你最远能达到卡片长度的一半.(我们假定卡片都正放在桌 ...

  2. ORB

    http://wenku.baidu.com/link?url=R4Ev8aJNxwmjV0egSUqVBjmnt1KT_llzp8Oy2NbHnwa7Me9UAIHkiMG2Vwucu3RSDKwy ...

  3. Git简单应用(1)

    Git是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目. 1.Windows安装git msysgit是Windows版的Git,从https://git-for-windows. ...

  4. HTML&CSS学习心德

    学了html&css一周的时间,每天上课9小时,有空就看一下HTML+div+CSS视频,感觉还不错. 基本思路:从大的方面(整体结构)着手,将HTML的基本知识"解构"然 ...

  5. C#检测本地网络状态

    using System; using System.Runtime.InteropServices; public static class NetTool { [Flags] private en ...

  6. codeforces 724D(贪心)

    题目链接:http://codeforces.com/contest/724/problem/D 题意:给定一个字符串和一个数字m,选取一个一个子序列s,使得对于字符串中任意长度为m的子序列都至少含有 ...

  7. PHP 监控服务器动态

    预期准备 一个139邮箱,收到邮件后,可以免费给你短信提醒.如果你不需要短信提醒功能,用什么邮箱都可以 另外一个可以运行PHP文件的Web服务器(相当于监控服务器),现在免费的PHP网站空间很多,上网 ...

  8. PHP乱码完美解决

    文章来源  http://www.lupaworld.com/forum.php?mod=viewthread&tid=148807 A.首先说下HTML中文乱码问题的解决方法. 比如有个in ...

  9. onTouch与onClick冲突解决方法

    view.setOnTouchListener(new OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent ...

  10. Norm and Sparse Representation

    因为整理的时候用的是word, 所以就直接传pdf了. 1.关于范数和矩阵求导.pdf 参考的主要是网上的几个博文. 2.稀疏表示的简单整理.pdf 参考论文为: A Survey of Sparse ...