博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
用两个队列实现栈
阅读量:5896 次
发布时间:2019-06-19

本文共 2365 字,大约阅读时间需要 7 分钟。

思路:

  1. 先往 queue1 顺次插入1,2,3,4,5,此时按照栈的规则应先出来 5,所以先将1,2,3,4 出队列 queue1,并入队列 queue2,5 出队列,queue2 当前状态是:1,2,3,4,queue1当前状态为空;
  2. 将1,2,3入队列 queue1,4 出队列,此时,queue2 为空,queue1 有 1,2,3...
  3. 重复以上步骤

代码实现:

/** * 题目类型:队列 * * 题目要求:用两个队列实现栈 * * 思路:1. 先往 queue1 顺次插入1,2,3,4,5,此时按照栈的规则应先出来 5,所以先将1,2,3,4 出队列 queue1,并入队列 queue2,5 出队列 *  queue2 当前状态是:1,2,3,4,queue1当前状态为空; *  2. 将1,2,3入队列 queue1,4 出队列,此时,queue2 为空,queue1 有 1,2,3... *  3. 重复以上步骤 */public class QueueToStack {    private Queue
queue1 = new ArrayDeque
(); private Queue
queue2 = new ArrayDeque
(); /** * 向栈中压入数据 * @param data */ private void push(Integer data) { if (queue1.isEmpty() && queue2.isEmpty()) { queue1.add(data); } //如果queue1为空,queue2有数据,直接放入queue2 if (queue1.isEmpty()) { queue2.add(data); } if (queue2.isEmpty()) { queue1.add(data); } } /** * 从栈中弹出数据 * @return */ private Integer pop() throws Exception { if (queue1.isEmpty() && queue2.isEmpty()) { throw new Exception("stack is empty"); } //如果queue1中没有元素,queue2中有元素,将queue2中的元素依次放入queue1中,弹出最后一个元素 if(queue1.isEmpty()){ while(queue2.size() > 1){ queue1.add(queue2.poll()); } return queue2.poll(); } //如果queue2中没有元素,queue1中有元素,将其queue1中的元素依次放入queue2中,弹出最后一个元素 if(queue2.isEmpty()){ while(queue1.size() > 1){ // poll() Retrieves and removes the head of this queue 若队列为空,则返回 null // peek() Retrieves, but does not remove, the head of this queue queue2.add(queue1.poll()); } return queue1.poll(); } return null; } @Test public void testQueue() throws Exception { QueueToStack queueToStack = new QueueToStack(); queueToStack.push(1); queueToStack.push(0); queueToStack.push(6); queueToStack.push(9); System.out.println(queueToStack.pop()); System.out.println(queueToStack.pop()); queueToStack.push(2); System.out.println(queueToStack.pop()); System.out.println(queueToStack.pop()); System.out.println(queueToStack.pop()); }}复制代码

转载于:https://juejin.im/post/5b9329d75188255c791ae25b

你可能感兴趣的文章
ASP.NET Web API自身对CORS的支持: EnableCorsAttribute特性背后的故事
查看>>
【转】国家集训队论文分类
查看>>
Eclipse 常用快捷键
查看>>
INDEX--索引页上存放那些数据
查看>>
INDEX--关于索引的琐碎
查看>>
sql查看所有表大小的方法
查看>>
nexus7 1代 刷4.2.2+root[转]
查看>>
推荐一个很好的富文本web编辑器UEditor
查看>>
UNIX网络编程读书笔记:TCP输出、UDP输出和SCTP输出
查看>>
扩展 DbUtility (1)
查看>>
iOS开发UI篇—使用picker View控件完成一个简单的选餐应用
查看>>
使用UITableView实现图片视差效果
查看>>
CentOS RHEL 安装 Tomcat 7
查看>>
erlang如何有效地监视大量的并发连接
查看>>
Windows下Mysql5.6启用监控执行脚本的日志
查看>>
Apple Developer Registration and DUNS Number Not Accepted
查看>>
motion移植
查看>>
Hadoop学习笔记系列文章导航
查看>>
转一贴,今天实在写累了,也看累了--【Python异步非阻塞IO多路复用Select/Poll/Epoll使用】...
查看>>
Codeforces Round #290 (Div. 2) C. Fox And Names dfs
查看>>