LeetCode题目:用栈实现队列
具体原理:
首先用两个栈模拟队列,分别为输入栈InputStack和输出栈OutputStack。
-push:InputStack栈添加数据
-pop:把InputStack栈的数据拷贝给OutputStack栈。然后对OutputStack栈 执行pop 操作。完成之后将数据重新拷贝给InputStack,OutputStack清空
-top:同pop理,但OutputStack栈执行top操作。 流程图如下:
#include<stack>
using namespace std;
class MyQueue {
public:
/** Initialize your data structure here. */
MyQueue() {}
/** Push element x to the back of queue. */
void push(int x) {
InputStack.push(x);
}
/** Removes the element from in front of queue and returns that element. */
int pop() {
while (!InputStack.empty())
{
OutputStack.push(InputStack.top());
InputStack.pop();
}
int top = OutputStack.top();
OutputStack.pop();
while (!OutputStack.empty())
{
InputStack.push(OutputStack.top());
OutputStack.pop();
}
return top;
}
/** Get the front element. */
int peek() {
while (!InputStack.empty())
{
OutputStack.push(InputStack.top());
InputStack.pop();
}
int top = OutputStack.top();
while (!OutputStack.empty())
{
InputStack.push(OutputStack.top());
OutputStack.pop();
}
return top;
}
/** Returns whether the queue is empty. */
bool empty() {
if (OutputStack.empty() && InputStack.empty())
return true;
return false;
}
private:
stack<int> InputStack;
stack<int> OutputStack;
};