思路分析:
(1)初始化两个数据类型为int的栈
(2) push()操作的话,就直接把元素压到第一个栈中
(3)pop()操作中,由于第一个栈中是后进先出的,因此就把第一个栈中的元素放到第二个栈中,此时第二栈中元素的出队顺序就是正确的队列出队顺序
(4)peek()操作,相较于pop来说,只是取到栈顶元素之后,不移除而已
(5)empty()操作,要两个栈同时为空时,这个队列才为空
代码实现:
class MyQueue {
stack<int>s1,s2;
public:
MyQueue() {
}
void push(int x) {
s1.push(x);
}
int pop() {
if(s2.empty())
{
while(!s1.empty())
{
s2.push(s1.top());
s1.pop();
}
}
int num=s2.top();
s2.pop();
return num;
}
int peek() {
if(s2.empty())
{
while(!s1.empty())
{
s2.push(s1.top());
s1.pop();
}
}
return s2.top();
}
bool empty() {
return s1.empty()&&s2.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();
*/