Every day a Leetcode
题目来源:232. 用栈实现队列
解法1:模拟
我们用 C++ 模拟用栈实现队列。
设置两个栈。
将一个栈当作输入栈,用于压入 push 传入的数据。
另一个栈当作输出栈,用于 pop 和 peek 操作。
每次 pop 或 peek 时,若输出栈为空则将输入栈的全部数据依次弹出并压入输出栈,这样输出栈从栈顶往栈底的顺序就是队列从队首往队尾的顺序。
代码:
class MyQueue {
// 定义两个栈:输入栈inStack,输出栈outStack
private:
stack<int> inStack,outStack;
// 将输入栈的元素全部依次压入输出栈
void shift()
{
while(!inStack.empty())
{
int x=inStack.top();
outStack.push(x);
inStack.pop();
}
}
public:
MyQueue() {
}
void push(int x) {
// 将元素压入输入栈
inStack.push(x);
}
int pop() {
// 当输出栈为空时,执行shift函数
if(outStack.empty()) shift();
// 将输出栈栈顶元素弹出
int x=outStack.top();
outStack.pop();
return x;
}
int peek() {
// 当输出栈为空时,执行shift函数
if(outStack.empty()) shift();
// 返回输出栈栈顶元素
return outStack.top();
}
bool empty() {
// 若输入栈和输出栈全为空,则队列为空
if(inStack.empty() && outStack.empty()) return true;
else return false;
}
};
/**
* Your MyQueue object will be instantiated and called as such:
* MyQueue* obj = new MyQueue();
* obj->push(x);
* int param_2 = obj->pop();
* int param_3 = obj->peek();
* bool param_4 = obj->empty();
*/
结果:

示例:

复杂度分析:
时间复杂度:

空间复杂度:O(n)。
用栈实现队列
本文介绍了一种使用两个栈来模拟队列行为的方法。通过将一个栈作为输入栈用于元素的压入,另一个栈作为输出栈用于元素的弹出及查看顶部元素。当输出栈为空时,将输入栈的所有元素移至输出栈,从而实现先进先出的队列特性。
800

被折叠的 条评论
为什么被折叠?



