Implement Stack using Queues
2015-07-08 16:06
573 查看
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
and
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).
Update (2015-06-11):
The class name of the Java function had been updated to MyStack instead of Stack.
Credits:
Special thanks to @jianchao.li.fighter for adding this problem and all test cases.
Show Tags
Have you met this question in a real interview?
题目大意:用队列,实现栈。如果你的语言不支持队列,也可以用列表来模仿实现。那就用ArrayList,一个就够了,用起来简单
代码如下:
参考博客:http://www.bubuko.com/infodetail-934509.html
也有像剑指offer上说的用两个队列来实现stack
代码如下:
记得区分queue用add,peek,poll,而stack用push,pop,peek
参考博客:http://www.cnblogs.com/easonliu/p/4568492.html
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).
Update (2015-06-11):
The class name of the Java function had been updated to MyStack instead of Stack.
Credits:
Special thanks to @jianchao.li.fighter for adding this problem and all test cases.
Show Tags
Have you met this question in a real interview?
题目大意:用队列,实现栈。如果你的语言不支持队列,也可以用列表来模仿实现。那就用ArrayList,一个就够了,用起来简单
代码如下:
class MyStack { List<Integer> stack = new ArrayList<>(); // Push element x onto stack. public void push(int x) { stack.add(x); } // Removes the element on top of the stack. public void pop() { if(!empty()){ stack.remove(stack.size()-1); } } // Get the top element. public int top() { if(!empty()){ return stack.get(stack.size()-1); } return -1; } // Return whether the stack is empty. public boolean empty() { return stack.size()==0; } }
参考博客:http://www.bubuko.com/infodetail-934509.html
也有像剑指offer上说的用两个队列来实现stack
代码如下:
记得区分queue用add,peek,poll,而stack用push,pop,peek
class MyStack { Queue<Integer> q1 = new ArrayDeque<>(); Queue<Integer> q2 = new ArrayDeque<>(); // Push element x onto stack. public void push(int x) { q1.add(x); } // Removes the element on top of the stack. public void pop() { if(!q1.isEmpty()){ while(q1.size()>1){ q2.add(q1.poll()); } q1.poll(); }else{ while(q2.size()>1){ q1.add(q2.poll()); } q2.poll(); } } // Get the top element. public int top() { if(!q1.isEmpty()){ while(q1.size()>1){ q2.add(q1.poll()); } int top = q1.peek(); q2.add(q1.poll()); return top; }else{ while(q2.size()>1){ q1.add(q2.poll()); } int top = q2.peek(); q1.add(q2.poll()); return top; } } // Return whether the stack is empty. public boolean empty() { return q1.isEmpty()&&q2.isEmpty(); } }
参考博客:http://www.cnblogs.com/easonliu/p/4568492.html
相关文章推荐
- Django-suit
- PAT 1085. Perfect Sequence (25)
- iOS开发18:UITableView中行的操作
- STL - priority_queue(优先队列)
- STL - priority_queue(优先队列)
- 简述UIPikerView的属性和用法
- 学习easyui疑问(二)
- 简述UIImagePickerController的属性和用法
- 简述UIDatePicker的用法
- Calling startActivity() from outside of an Activity context requires the FLAG_ACTIVITY_NEW_TASK fla
- 简述UIScrollView的属性和用法
- 简述UITableView的属性和用法
- 黑马程序员—Java的GUI
- 简述UIPageControl的属性和用法
- 解决UITableView在iOS7中UINavigationController里的顶部留白问题
- 简述UISegment的属性和用法
- 简述UIView的属性和用法
- 简述UIControl事件的用法
- 简述UIAlertView的属性和用法
- 简述UIActivityIndicatorView的属性和用法