解题思路
核心就是要建立两个栈,一个输入栈一个输出栈。
输入的时候:
先让数据进入输入栈,这时候栈顶元素就是最后进入栈的元素。
输出的时候:
先让输入栈的元素push( )到输出栈。
这时候:
输入栈的栈顶就成了输出栈的栈底;
输入栈的栈底就成了输出栈的栈顶。
刚好输入栈的栈底就是第一个输入的元素,此时,他在输出队列中是栈顶。
所以也会第一个输出他。
这样就达到了:先入先出。队列的作用了。
#include <iostream>
#include <stack>
using namespace std;
class MyQueue {
public:
//定义两个栈,一个输入栈stIn,一个输出栈stOut
stack<int> stIn;//输入栈
stack<int> stOut;//输出栈
MyQueue() {
}
void push(int x) {
//直接往输入栈里push
stIn.push(x);
}
int pop() {
/*pop的时候分两种情况
*一.stOut栈为空是,要先让stIn的元素push到stOut里面
*二.stOut栈不为空,直接pop就行
*/
if (stOut.empty()) {
//若输出栈为空
while (!stIn.empty()) {
stOut.push(stIn.top());
stIn.pop();
}
}
int result = stOut.top();
stOut.pop();
return result;
}
int peek() {
//直接使用前面定义的pop函数
int res = this->pop();
stOut.push(res);
return res;
}
bool empty() {
//当输入栈stIn和输出栈stOut都为空是,整个队列才为空
return stOut.empty() && stIn.empty();
}
};