Implement Stack using Queues
2016-05-26 22:03
501 查看
题目描述:
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).
解题思路:
使用两个队列,时刻保持一个队列为空。
push:push操作时直接把数值x push到非空的队列;
pop:把非空队列中的元素依次出队列直到队列中剩下一个元素,并把出队列的元素依次push到空队列中,这样院非空队列中剩下的元素就是栈顶元素,直接pop即可
top:把非空队列中的元素依次出队列直到队列中剩下一个元素,并把出队列的元素依次push到空队列中,这样院非空队列中剩下的元素就是栈顶元素,直接front即可,然后把该元素在push到原空队列中
empty:判断两个队列是否都为空即可
AC代码如下:
class Stack {
public:
// Push element x onto stack.
void push(int x) {
if (!que1.empty()){
que1.push(x);
}
else{
que2.push(x);
}
}
// Removes the element on top of the stack.
void pop() {
if (!que1.empty()){
while (que1.size() > 1){
que2.push(que1.front());
que1.pop();
}
que1.pop();
}
else{
while (que2.size() > 1){
que1.push(que2.front());
que2.pop();
}
que2.pop();
}
}
// Get the top element.
int top() {
int ans;
if (!que1.empty()){
while (que1.size() > 1){
que2.push(que1.front());
que1.pop();
}
ans = que1.front();
que1.pop();
que2.push(ans);
}
else{
while (que2.size() > 1){
que1.push(que2.front());
que2.pop();
}
ans = que2.front();
que2.pop();
que1.push(ans);
}
return ans;
}
// Return whether the stack is empty.
bool empty() {
return que1.empty() && que2.empty();
}
private:
queue<int> q
4000
ue1;
queue<int> que2;
};
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 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).
解题思路:
使用两个队列,时刻保持一个队列为空。
push:push操作时直接把数值x push到非空的队列;
pop:把非空队列中的元素依次出队列直到队列中剩下一个元素,并把出队列的元素依次push到空队列中,这样院非空队列中剩下的元素就是栈顶元素,直接pop即可
top:把非空队列中的元素依次出队列直到队列中剩下一个元素,并把出队列的元素依次push到空队列中,这样院非空队列中剩下的元素就是栈顶元素,直接front即可,然后把该元素在push到原空队列中
empty:判断两个队列是否都为空即可
AC代码如下:
class Stack {
public:
// Push element x onto stack.
void push(int x) {
if (!que1.empty()){
que1.push(x);
}
else{
que2.push(x);
}
}
// Removes the element on top of the stack.
void pop() {
if (!que1.empty()){
while (que1.size() > 1){
que2.push(que1.front());
que1.pop();
}
que1.pop();
}
else{
while (que2.size() > 1){
que1.push(que2.front());
que2.pop();
}
que2.pop();
}
}
// Get the top element.
int top() {
int ans;
if (!que1.empty()){
while (que1.size() > 1){
que2.push(que1.front());
que1.pop();
}
ans = que1.front();
que1.pop();
que2.push(ans);
}
else{
while (que2.size() > 1){
que1.push(que2.front());
que2.pop();
}
ans = que2.front();
que2.pop();
que1.push(ans);
}
return ans;
}
// Return whether the stack is empty.
bool empty() {
return que1.empty() && que2.empty();
}
private:
queue<int> q
4000
ue1;
queue<int> que2;
};
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- 关于指针的一些事情
- c++ primer 第五版 笔记前言
- share_ptr的几个注意点
- Lua中调用C++函数示例
- Lua教程(一):在C++中嵌入Lua脚本
- Lua教程(二):C++和Lua相互传递数据示例
- C++联合体转换成C#结构的实现方法
- C++高级程序员成长之路
- C++编写简单的打靶游戏
- C++ 自定义控件的移植问题
- C++变位词问题分析
- C/C++数据对齐详细解析
- C++基于栈实现铁轨问题
- C++中引用的使用总结
- 使用Lua来扩展C++程序的方法
- C++中调用Lua函数实例
- Lua和C++的通信流程代码实例
- C与C++之间相互调用实例方法讲解
- 解析C++中派生的概念以及派生类成员的访问属性