LeetCode---(225)Implement Stack using Queues
2015-07-15 21:18
495 查看
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
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).
用两个队列模拟一个堆栈:
队列a和b
(1)取栈顶元素: 返回有元素的队列的首元素
(2)判栈空:若队列a和b均为空则栈空
(3)入栈:a队列当前有元素,b为空(倒过来也一样)则将需要入栈的元素先放b中,然后将a中的元素依次出列并入列倒b中。(保证有一个队列是空的)
(4)出栈:将有元素的队列出列即可。
比如先将1插入队a中 ,现在要将2入栈,则将2插入b总然后将a中的1出列入到b中,b中的元素变为 2 ,1
a为空,现在要压入3 则将3插入a中 ,依次将b中的2 ,1 出列并加入倒a中 ,a中的元素变为 3,2,1 b为空
算法保证在任何时候都有一队列为空
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 emptyoperations 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).
用两个队列模拟一个堆栈:
队列a和b
(1)取栈顶元素: 返回有元素的队列的首元素
(2)判栈空:若队列a和b均为空则栈空
(3)入栈:a队列当前有元素,b为空(倒过来也一样)则将需要入栈的元素先放b中,然后将a中的元素依次出列并入列倒b中。(保证有一个队列是空的)
(4)出栈:将有元素的队列出列即可。
比如先将1插入队a中 ,现在要将2入栈,则将2插入b总然后将a中的1出列入到b中,b中的元素变为 2 ,1
a为空,现在要压入3 则将3插入a中 ,依次将b中的2 ,1 出列并加入倒a中 ,a中的元素变为 3,2,1 b为空
算法保证在任何时候都有一队列为空
class Stack { public: queue<int> queue1; queue<int> queue2; // Push element x onto stack. void push(int x) { if(queue1.empty()) { queue1.push(x); while(!queue2.empty()) { int temp=queue2.front(); queue2.pop(); queue1.push(temp); } }else{ queue2.push(x); while(!queue1.empty()) { int temp=queue1.front(); queue1.pop(); queue2.push(temp); } } } // Removes the element on top of the stack. void pop() { if(!queue1.empty()) queue1.pop(); if(!queue2.empty()) queue2.pop(); } // Get the top element. int top() { if(!queue1.empty()) return queue1.front(); if(!queue2.empty()) return queue2.front(); } // Return whether the stack is empty. bool empty() { return queue1.empty() && queue2.empty(); } };
相关文章推荐
- StringBuffer,StringBuilder(java基础毕老师的源码)
- hdu 1560 DNA sequence(迭代加深搜索)(经典题)
- Request To JavaBean(请求对象转换为JavaBean对象)
- Java troubleshooting guide
- zoj 3639 Guess a Function
- LeetCode---(232)Implement Queue using Stacks
- 黑马day18 juery的高级特性&Ajax的$.get()/post()方法
- POJ2299 Ultra-QuickSort 【树阵】+【hash】
- 稠密(dense)并且唯一(unique)的随机(random)数生成
- request.getContextPath()、request.getRequestURI()、request.getRequestURI()、getServletPath()
- hdu 3304 Interesting Yang Yui Triangle
- SOUI 封装图片资源到dll的方法
- HDU_1005 Number Sequence(math)
- UIImagePickerController---图片添加---初级使用
- UIImagePickerController
- Building the main Guest Additions module
- 关于UIWindow的一点儿思考
- codeforces 558D Guess Your Way Out! II 规律
- UI3_CustomUITableViewCell
- iOS开发UI篇—懒加载