- 思路
- 用两个栈实现一个队列
一个栈是输入栈,一个栈是输出栈,所有输入的数据都放在输入栈,只要输出栈有数据就酱数据从输出栈中pop,否则将所有输入栈的数据转移至输出栈后,再冲输出栈pop数据。
class MyQueue
{
public:
/** Initialize your data structure here. */
MyQueue()
{
}
/** Push element x to the back of queue. */
void push(int x)
{
stkIn.push(x);//直接将数据放入输入栈
}
/** Removes the element from in front of queue and returns that element. */
int pop()
{
if (stkOut.empty())//如果输出栈为空,则先将输入栈中所有的数据转移至输出栈
{
while (!stkIn.empty())
{
stkOut.push(stkIn.top());
stkIn.pop();
}
}
int res = stkOut.top();//从输出栈中取数据,并进行pop
stkOut.pop();
return res;
}
/** Get the front element. */
int peek()
{
int res = this->pop(); // 直接使用已有的pop函数
stkOut.push(res); // 因为pop函数弹出了元素res,所以再添加回去
return res;
}
/** Returns whether the queue is empty. */
bool empty()
{
return stkIn.empty() && stkOut.empty();
}
private:
stack<int> stkIn;
stack<int> stkOut;
};
/**
* 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();
*/