题目描述
思路
根据题干描述,选用两个栈,一个负责进队列,一个负责出队列。
详细实现过程看下面的实现代码就能看得很清楚了。
代码实现
class MyQueue {
public:
//用两个栈,一个用来进数据,一个用来出数据
stack<int> stIn;
stack<int> stOut;
MyQueue()
{
}
void push(int x)
{
//存进stIn
stIn.push(x);
}
int pop()
{
if(stOut.empty())
{
//每次将stIn的栈顶数据传给stOut然后再pop掉
while(!stIn.empty())
{
stOut.push(stIn.top());
stIn.pop();
}
}
int result=stOut.top();
stOut.pop();
return result;
}
int peek()
{
int res=this->pop();//复用pop方法
stOut.push(res);//因为是peek,不能删除数据,所以pop掉后还要push进去
return res;
}
bool empty()
{
//如果进栈和出栈都为空了,说明模拟的队列为空了。
return stIn.empty()&&stOut.empty();
}
};
/**
* 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();
*/