1、描述
实现一个MyQueue类,该类用两个栈来实现一个队列。
2、关键字
用栈实现队列
3、思路
使用两个栈,push就在第一个栈中压栈,pop()就在第二个栈中操作
如果第二个栈为空,就把第一个栈中的元素压栈,
4、notes
等第二个栈为空,才进行压栈操作
5、复杂度
时间:O(N)
空间:O(N)
6、code
class MyQueue {
private:
stack<int>st1,st2;
public:
MyQueue() {}
void push(int x) {
st1.push(x);
}
/** Removes the element from in front of queue and returns that element. */
int pop() {
if(!st2.empty())
{
int tem1=st2.top();
st2.pop();
return tem1;
}else
{
while(!st1.empty()) // 把st1栈的元素全部压栈st2
{
st2.push(st1.top());
st1.pop();
}
int tem2=st2.top();
st2.pop();
return tem2;
}
}
/** Get the front element. */
int peek() {
if(!st2.empty())
return st2.top();
else
{
while(!st1.empty())
{
st2.push(st1.top());
st1.pop();
}
return st2.top();
}
}
/** Returns whether the queue is empty. */
bool empty() {
return st1.empty()&&st2.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();
*/