?做题思路 or 感想 :
- 用栈来实现队列的一般方法是:造一个输入栈和一个输出栈来模拟队列
- 当要push时,则把元素push进输入栈
- 当要pop时,检测输出栈是否有元素。若有,则直接把输出栈的栈顶元素pop掉就好。若无,则要先把输入栈的元素倒进输出栈,再进行操作
class MyQueue {
public:
MyQueue() {
}
stack InSt; //先造两个输入,输出栈
stack OutSt;
void push(int x) {
InSt.push(x);
}
int pop() { //若输出栈有元素,则pop,若无,则先把输入栈倒进输出栈
if (OutSt.size() != 0) {
int result = OutSt.top();
OutSt.pop();
return result;
} else {
while (InSt.size() != 0) {
OutSt.push(InSt.top());
InSt.pop();
}
int result = OutSt.top();
OutSt.pop();
return result;
}
}
int peek() {
if (OutSt.size() != 0) {
int result = OutSt.top();
return result;
} else {
while (InSt.size() != 0) {
OutSt.push(InSt.top());
InSt.pop();
}
int result = OutSt.top();
return result;
}
}
bool empty() {
return InSt.empty() && OutSt.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();
*/