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.
- You must use only standard operations of a queue -- which means only
push to back
,peek/pop from front
,size
, andis 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).
实话说,这道题出的有点无聊,我用deque做的,下面还有一种stack的思路。
1.deque
class Stack {
public:
// Push element x onto stack.
void push(int x) {
que.push_back(x);
}
// Removes the element on top of the stack.
void pop() {
if(!que.empty())
que.pop_back();
}
// Get the top element.
int top() {
return que.back();
}
// Return whether the stack is empty.
bool empty() {
return que.empty();
}
private:
deque<int> que;
};
2.queue
使用队列时需要注意,queue没有pop_back()的方法,因为它是first in first out, 而stack 是 first in last out,所以要通过把前面的元素挪到新加元素的后面,利用queue的pop方法,每次弹出队列队头元素即可。
代码如下:
class Stack {
public:
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();
}
}
void pop() {
que.pop();
}
int top() {
return que.front();
}
bool empty() {
return que.empty();
}
};