leetcode 225:Implement Stack using Queues
2015-07-08 12:56
357 查看
题目:
Implement the following operations of a stack using queues.
Notes:
分析:
本题是要用队列实现栈的相关操作,可以用两个队列来实现栈的四个操作,设定始终保证一个队列为空,两个队列分别为q1,q2:
1、push(x):
若q1非空,则x加入到q2中,然后将q1元素放入到q2中;若q2非空,则x加入到q1中,然后将q2元素放入到q1中.
2、pop():
若q1非空,则q1执行队列poll()操作;若q2非空,则q2执行队列poll()操作.
3、top():
若q1非空,则q1执行队列peek()操作;若q2非空,则q2执行队列peek()操作.
4、empty():
若队列q1和q2都为空,则返回true.
代码:
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).
分析:
本题是要用队列实现栈的相关操作,可以用两个队列来实现栈的四个操作,设定始终保证一个队列为空,两个队列分别为q1,q2:
1、push(x):
若q1非空,则x加入到q2中,然后将q1元素放入到q2中;若q2非空,则x加入到q1中,然后将q2元素放入到q1中.
2、pop():
若q1非空,则q1执行队列poll()操作;若q2非空,则q2执行队列poll()操作.
3、top():
若q1非空,则q1执行队列peek()操作;若q2非空,则q2执行队列peek()操作.
4、empty():
若队列q1和q2都为空,则返回true.
代码:
import java.util.ArrayDeque; import java.util.Queue; public class MyStack { Queue<Integer> q1=new ArrayDeque<Integer>(); ; Queue<Integer> q2=new ArrayDeque<Integer>(); // Push element x onto stack. public void push(int x) { if(q1.isEmpty()){ q1.offer(x); while(!q2.isEmpty()){ int tmp=q2.peek(); q2.poll(); q1.offer(tmp); } }else{ q2.offer(x); while(!q1.isEmpty()){ int tmp=q1.peek(); q1.poll(); q2.offer(tmp); } } } // Removes the element on top of the stack. public void pop() { if(!q1.isEmpty()) q1.poll(); if(!q2.isEmpty()) q2.poll(); } // Get the top element. public int top() { if(!q1.isEmpty()) return q1.peek(); if(!q2.isEmpty()) return q2.peek(); return 0; } // Return whether the stack is empty. public boolean empty() { return q1.isEmpty()&&q2.isEmpty(); } public static void main(String[] args){ MyStack stack=new MyStack(); boolean result=stack.empty(); System.out.println("empty:"+result); } }
相关文章推荐
- UITableView
- Solving “Dynamic Web Module 3.0 requires Java 1.6 or newer” in Maven Projects
- STL - deque(双端队列)
- STL - deque(双端队列)
- WebRequest
- Android 中数据库查询方法 query() 中的参数
- 分享一个很屌的eazyui二开demo
- UIPickerView用法(左右比例,整体大小,字体大小)
- StoreBoard使用UITabbarController设置tabbarItem的selectedImage问题
- Iphone开发-NSdata 与 NSString,Byte数组,UIImage 的相互转换
- 关于如何隐藏UItableview多余的分割线
- UI设计学习路径(一个)—好酒也怕巷子深
- 判断StringBuilder是否为空
- KMP & hdu 1711 Number Sequence
- 5.建造者模式(Builder Pattern)
- ios 手势UI控件事件冲突
- UUID 、GUID、COMB 的区别与联系
- php imagecreatetruecolor输出字符符或验证码
- Xcode unable to dequeue a cell with identifier
- miui6和lbe 问题