请你仅使用两个栈实现先入先出队列。队列应当支持一般队列的支持的所有操作(push、pop、peek、empty):
实现 MyQueue 类:
void push(int x) 将元素 x 推到队列的末尾
int pop() 从队列的开头移除并返回元素
int peek() 返回队列开头的元素
boolean empty() 如果队列为空,返回 true ;否则,返回 false
思路:
其实就是两个栈倒来倒去~适当的时间倒可以提高效率。
我们只要保证,要输出的那个元素是最早的输入就行了,所以不需要每一次输入输出都倒,只要out栈为空的时候倒一次in即可。
AC代码:
class MyQueue {
private:
stack<int> in,out;
void in2out(){
while(!in.empty()){
out.push(in.top());
in.pop();
}
}
public:
MyQueue() {}
void push(int x) {
in.push(x);
}
int pop() {
if(out.empty()) in2out();
int temp = out.top();
out.pop();
return temp;
}
int peek() {
if(out.empty()) in2out();
return out.top();
}
bool empty() {
if(in.empty()&&out.empty()) return true;
else return false;
}
};
最后bool empty()的写法还可以优美一点~
return in.empty()&&out.empty();