Description:

Implement the following operations of a stack using queues.

  • push(x) -- Push element x onto stack.
  • pop() -- Removes the element on top of the stack.
  • top() -- Get the top element.
  • empty() -- Return whether the stack is empty.

Notes:

  • You must use only standard operations of a queue -- which means only push to back, peek/pop from front, size, and is empty operations are valid.
  • Depending on your language, queue may not be supported natively. You may simulate a queue by using a list or deque (double-ended queue), as long as you use only standard operations of a queue.
  • You may assume that all operations are valid (for example, no pop or top operations will be called on an empty stack).

用队列来实现一个栈。

思路:用两个队列来模拟栈的功能,当前队列(cur)是用来存放数据的,另一个队列是用来替换当前队列的,这样就能操作队尾元素了。两个队列来回切换,一个用来保存数据,另一个用来操作队尾元素。

PS.Java里不能用泛型数组啊,只好用线性表来代替了。代码看起来又复杂了一些。要不要用C++和Python再来一遍。

class MyStack {
public List<Queue<Integer>> queue;
public int cur;
public MyStack() {
queue = new ArrayList<Queue<Integer>>();
queue.add(new LinkedList<Integer>());
queue.add(new LinkedList<Integer>());
cur = 0;
}
// Push element x onto stack.
public void push(int x) {
queue.get(cur).offer(x);
} // Removes the element on top of the stack.
public void pop() {
while(queue.get(cur).size() > 1) {
queue.get(1-cur).offer(queue.get(cur).poll());
}
queue.get(cur).poll();
cur = 1 - cur;
} // Get the top element.
public int top() {
while(queue.get(cur).size() > 1) {
queue.get(1-cur).offer(queue.get(cur).poll());
}
int t = queue.get(cur).poll();
queue.get(1-cur).offer(t);
cur = 1 - cur;
return t;
} // Return whether the stack is empty.
public boolean empty() {
if(queue.get(cur).isEmpty())
return true;
else
return false;
}
}

最新文章

  1. Python操作Mysql之基本操作
  2. Win7下Doxygen配置与使用
  3. [转载]TFS与Project、Excel同步
  4. javascript --- 设计模式之Module模式
  5. Java7并发编程实战(一) 线程的中断
  6. 修改shell 将当前shell(默认是bash B SHELL )改为csh C SHELL
  7. iOS - Swift PList 数据存储
  8. 懒加载异常:org.hibernate.LazyInitializationException: could not initialize proxy - no Session
  9. get the runing time of C++ console program.
  10. 原型链和new
  11. poj3278(bfs)
  12. NEU 1440 The minimum square sum (平方剩余和欧拉准则)
  13. SQL复习五(索引)
  14. jquery的几个国内CDN加速节点
  15. C++ stack
  16. NOIP2017总结
  17. Eclipse设置所有新创建文件默认格式为UTF-8
  18. Dynamic CRM 2015学习笔记(1)Azure 上安装 CRM 2015
  19. 3.建造者模式(Builder)
  20. I2C和SPI总线对比

热门文章

  1. java——多线程的实现
  2. 对于REST中无状态(stateless)的一点认识(转)
  3. [Django学习]分页
  4. C# 关于JArray和JObject封装JSON对象
  5. C# - 简单介绍TaskScheduler
  6. 关于在Android中添加事件监听器的方法
  7. 【转】C# Async/Await 异步编程中的最佳做法
  8. BCM_SDK命令
  9. 用 #include “filename.h” 格式来引用非标准库的头文件
  10. 使用ffmepg的lib库调试,debug版本下调试无问题,但release版本会出现跑飞的现象