232.用栈实现队列 (Easy)*
题目描述*
使用栈实现队列的下列操作:
- push(x) -- 将一个元素放入队列的尾部。
- pop() -- 从队列首部移除元素。
- peek() -- 返回队列首部的元素。
- empty() -- 返回队列是否为空。
说明*
你只能使用标准的栈操作 -- 也就是只有 push to top, peek/pop from top, size, 和 is empty 操作是合法的。
你所使用的语言也许不支持栈。你可以使用 list 或者 deque(双端队列)来模拟一个栈,只要是标准的栈操作即可。
假设所有操作都是有效的 (例如,一个空的队列不会调用 pop 或者 peek 操作)。
代码*
双栈实现,入队时把 outStack 出栈放入 inStack 然后再将 x 入栈。出队时把 inStack 出栈放入 outStack,移除 outStack 栈顶。取队首元素则将 inStack 放入 outStack 取 inStack 栈顶。
可以简化,用 front 变量保存第一个入队的元素。入队直接放入 inStack,出队时如果 outStack 为空,则将 inStack 放入 outStack,移除 outStack 栈顶。取队首元素,如果 outStack 为空则返回 front 变量。
class MyQueue {
private:
stack<int> inStack;
stack<int> outStack;
public:
/** Initialize your data structure here. */
MyQueue() {}
/** Push element x to the back of queue. */
void push(int x) {
// inStack.push(x);
while(!outStack.empty()) {
inStack.push(outStack.top());
outStack.pop();
}
inStack.push(x);
}
/** Removes the element from in front of queue and returns that element. */
int pop() {
while(!inStack.empty()) {
outStack.push(inStack.top());
inStack.pop();
}
int res = outStack.top();
outStack.pop();
return res;
}
/** Get the front element. */
int peek() {
while(!inStack.empty()) {
outStack.push(inStack.top());
inStack.pop();
}
return outStack.top();
}
/** Returns whether the queue is empty. */
bool empty() {
return inStack.empty() && outStack.empty();
}
};
class MyQueue {
private:
stack<int> inStack;
stack<int> outStack;
int front;
public:
/** Initialize your data structure here. */
MyQueue() {}
/** Push element x to the back of queue. */
void push(int x) {
if(inStack.empty()) {
front = x;
}
inStack.push(x);
}
/** Removes the element from in front of queue and returns that element. */
int pop() {
if(outStack.empty()) {
while(!inStack.empty()) {
outStack.push(inStack.top());
inStack.pop();
}
}
int res = outStack.top();
outStack.pop();
return res;
}
/** Get the front element. */
int peek() {
if(!outStack.empty()) {
return outStack.top();
}
return front;
}
/** Returns whether the queue is empty. */
bool empty() {
return inStack.empty() && outStack.empty();
}
};
最后更新: July 23, 2022