package class03; import java.util.Stack; /** * 用栈结构,实现队列结构。 * (特殊问法:用栈来实现图的宽度优先遍历,用队列来实现图的深度优先遍历) */ public class Code06_DoubleStackImplementQueue { /** * 两个栈实现队列 */ public static class TwoStackQueue { public Stack<Integer> pushStack;//压入栈,用于存放添加的元素。 public Stack<Integer> popStack;//弹出栈,用于从这里弹出元素。 public TwoStackQueue() { pushStack = new Stack<>(); popStack = new Stack<>(); } //将压入栈的所有元素一次性,导入到弹出栈。必须是一次性。 private void pushToPop() { if (popStack.empty()) { while (!pushStack.empty()) {//只要压入栈要有元素,就将压入栈的元素,添加到弹出栈。 popStack.push(pushStack.pop()); } } } //添加元素 public void add(Integer value) { pushStack.push(value);//向压入栈中压入一个元素 pushToPop();//添加完元素后,检查是否可以倒元素了,如果可以,就一次性倒完。 } //弹出元素 public Integer poll() { if (pushStack.empty() && popStack.empty()) { throw new RuntimeException("your queue is empty!"); } pushToPop();//弹出元素前,先检查,是否可以倒元素了。 return popStack.pop();//从弹出栈中弹出一个元素 } //获取弹出栈的栈顶的值,但是不弹出元素。 public Integer peek() { if (pushStack.empty() && popStack.empty()) { throw new RuntimeException("your queue is empty!"); } pushToPop();//获取值之前,先检查是否可以倒元素了。 return popStack.peek();//获取值 } } public static void main(String[] args) { TwoStackQueue twoStackQueue = new TwoStackQueue(); twoStackQueue.add(1); twoStackQueue.add(2); twoStackQueue.add(3); System.out.println(twoStackQueue.peek()); System.out.println(twoStackQueue.poll()); System.out.println(twoStackQueue.peek()); System.out.println(twoStackQueue.poll()); twoStackQueue.add(4); System.out.println(twoStackQueue.peek()); System.out.println(twoStackQueue.poll()); System.out.println(twoStackQueue.peek()); System.out.println(twoStackQueue.poll()); // System.out.println(twoStackQueue.poll()); } }
原文地址:http://www.cnblogs.com/TheFloorIsNotTooHot/p/16856130.html
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,请务用于商业用途!
3. 如果你也有好源码或者教程,可以到用户中心发布,分享有积分奖励和额外收入!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
7. 如遇到加密压缩包,默认解压密码为"gltf",如遇到无法解压的请联系管理员!
8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载
声明:如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性