题目:
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).
翻译:
用队列构造一个栈,实现一下操作。
- push(x)--将元素x压入堆栈。
- pop()--将栈顶元素弹出。
- top()--获得栈顶元素。
- empty()--当栈为空时返回
注意:
- 你需要使用标准的队列操作--就是说只有
push to back
,peek/pop from front
,size
和 is empty 操作是有效的。 - 依赖于你使用的语言,队列可能不会被支持。 只要您只使用队列的标准操作,你可以使用列表或双端队列(双端队列)来模拟队列。
- 你可以假设所有操作都是有效的(举例,没有pop或top操作在空栈中调用)。
思路:
使用两个队列来模拟栈。直接见代码。
C++代码(Visual Studio 2017):
class MyStack {
private:
/** Initialize your data structure here. */
queue<int> q2;
queue<int> q1;
public:
/** Push element x onto stack. */
void push(int x) {
while (!q1.empty()) {
q2.push(q1.front());
q1.pop();
}
q1.push(x);
while (!q2.empty()) {
q1.push(q2.front());
q2.pop();
}
}
/** Removes the element on top of the stack and returns that element. */
int pop() {
int n = q1.front();
q1.pop();
return n;
}
/** Get the top element. */
int top() {
return q1.front();
}
/** Returns whether the stack is empty. */
bool empty() {
if (q1.empty() && q2.empty())
return true;
else return false;
}
};