Leetcode 225:Implement Stack using Queues
2016-02-25 14:39
489 查看
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).
Update (2015-06-11):
The class name of the Java function had been updated to MyStack instead of Stack.
方法一:
用两个队列实现一个栈:
1.压入时,选择不为空的一个队列压入;
2.弹出或求栈顶元素时,首先将非空队列中的所有元素(除队尾元素)弹出保存到另一个队列,然后将队尾元素弹出即可
注意求栈顶元素时,记得将队尾元素也保存到另一个队列。
方法二:
用一个队列实现一个栈:
只需要在压入的方式稍作变化就行,每次压入一个元素,按照队列先进先出的原则,新压入的元素都在队尾,我们只要将整个队列翻转,使得队尾元素移动至队头即可,这样我们后面弹出和求栈顶元素的操作,就和队列一样处理就行。
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).
Update (2015-06-11):
The class name of the Java function had been updated to MyStack instead of Stack.
方法一:
用两个队列实现一个栈:
1.压入时,选择不为空的一个队列压入;
2.弹出或求栈顶元素时,首先将非空队列中的所有元素(除队尾元素)弹出保存到另一个队列,然后将队尾元素弹出即可
注意求栈顶元素时,记得将队尾元素也保存到另一个队列。
//用两个队列实现一个栈: //1.压入时,选择不为空的一个队列压入; //2.弹出或求栈顶元素时,首先将非空队列中的所有元素(除队尾元素)弹出保存到另一个队列,然后将队尾元素弹出即可 //注意求栈顶元素时,记得将队尾元素也保存到另一个队列 class Stack { public: // Push element x onto stack. queue<int> que1; queue<int> que2; void push(int x) { if (!que2.empty()) { que2.push(x); } else { que1.push(x); } } // Removes the element on top of the stack. void pop() { if (!que2.empty()) { while (que2.size()>1) { que1.push(que2.front()); que2.pop(); } que2.pop(); } else { while (que1.size()>1) { que2.push(que1.front()); que1.pop(); } que1.pop(); } } // Get the top element. int top() { int topElement = 0; if (!que2.empty()) { while (que2.size()>1) { que1.push(que2.front()); que2.pop(); } topElement = que2.front(); que1.push(que2.front()); que2.pop(); } else { while (que1.size()>1) { que2.push(que1.front()); que1.pop(); } topElement = que1.front(); que2.push(que1.front()); que1.pop(); } return topElement; } // Return whether the stack is empty. bool empty() { return que1.empty() && que2.empty(); } };
方法二:
用一个队列实现一个栈:
只需要在压入的方式稍作变化就行,每次压入一个元素,按照队列先进先出的原则,新压入的元素都在队尾,我们只要将整个队列翻转,使得队尾元素移动至队头即可,这样我们后面弹出和求栈顶元素的操作,就和队列一样处理就行。
//用一个队列实现一个栈 class Stack { public: // Push element x onto stack. queue<int> que; void push(int x) { que.push(x); for (int i = 0; i<que.size() - 1; ++i) { que.push(que.front()); que.pop(); } } // Removes the element on top of the stack. void pop() { que.pop(); } // Get the top element. int top() { return que.front(); } // Return whether the stack is empty. bool empty() { return que.empty(); } };
相关文章推荐
- iOS的UDID废用以及UUID配合keychain的替换方案实现
- 彻底抛弃脚本录制,LR脚本之使用web_custom_request函数自定义
- iPhone开发之UIView中的动画属性
- iOS之UIScrollView循环滚动
- ${pageContext.request.contextPath} JSP取得绝对路径
- BlueStore 介绍
- iOS 性能优化之 UIScrollView 实践经验
- Java基础:Day14笔记内容 ( StringBuilder类)
- 分布式消息队列(Message Queue)系统:kafka
- IOS UI-UISearchController
- String,StringBuffer与StringBuilder的区别??
- UITextField修改placeholder的大小和颜色
- 原生的强大DOM选择器querySelector
- CUDA issue:cudaGetDeviceCount()错误
- LeetCode -- Unique Paths II
- LeetCode -- Unique Paths
- Cordova使用build命令出错: Could not create the Java Virtual Machine.
- 通过UIGraphics重新设置image的大小
- Your build settings specify a provisioning profile with the UUID, no provisioning profile was
- 6.UITabBarController