232. 用栈实现队列
力扣题目链接
1:需要两个栈来实现输入栈以及输出栈
2:push数据的时候数据放到输入栈即可。
3:pop时候,输出栈如果为空,就把进栈数据全部导入进去,在从出栈弹出数据,如果输出栈不为空,则直接从出栈中弹出数据即可。
4:判空,如果输入栈与输出栈都为空说明模拟队列为空。
方法一:主要写pop,peek复用pop
class MyQueue {
public:
stack<int> stIn;
stack<int> stOut;
MyQueue() {
}
void push(int x) {
stIn.push(x);
}
int pop() {
if(stOut.empty())
{
while(!stIn.empty()){
stOut.push(stIn.top());
stIn.pop();
}
}
int restule = stOut.top();
stOut.pop();
return restule;
}
int peek() {
int restule = this->pop();
stOut.push(restule);
return restule;
}
bool empty() {
return stIn.empty() && stOut.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();
*/
方法二:主要写peek,pop复用pop
class MyQueue {
private:
stack<int> stIn;
stack<int> stOut;
public:
MyQueue() {
}
//添加元素到队尾,只要加入到输入栈即可
void push(int x) {
stIn.push(x);
}
//删除头元素并返回
int pop() {
this->peek(); //先调用peek保证输出栈不为空
int result = stOut.top();
stOut.pop();
return result;
}
int peek() {
int result = 0;
if(!stOut.empty()){ //如果输出栈不为空,直接在输出栈找top即可
result = stOut.top();
}
else{ //如果输出栈为空,需要先把输入栈全部导入到输出栈,再取top才可
while(!stIn.empty()){
int data = stIn.top();
stOut.push(data);
stIn.pop();
}
result = stOut.top();
}
return result;
}
bool empty() {
return stIn.empty() && stOut.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();
*/