用栈实现队列
[题目](232. 用栈实现队列)
重点
主要是要保持将入栈里的元素全部导入到出栈中,如果没有全部导入,则会出现混乱的情况
代码实现
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 result = stOut.top();
stOut.pop();
return result;
}
int peek() {
int res = this->pop();
// 需要将元素添加到出栈中
stOut.push(res);
return res;
}
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();
*/
用队列实现栈
[题目](225. 用队列实现栈)
重点
整体逻辑和用栈实现队列一致
代码实现
class MyStack {
public:
queue<int> que1;
queue<int> que2;
MyStack() {
}
void push(int x) {
que1.push(x);
}
int pop() {
int size = que1.size();
size--;
// 将que1 导入que2,但要留下最后一个元素
while (size--) {
que2.push(que1.front());
que1.pop();
}
// 留下的最后一个元素就是要返回的值
int result = que1.front();
que1.pop();
que1 = que2;
while(!que2.empty()) {
que2.pop();
}
return result;
}
int top() {
return que1.back();
}
bool empty() {
return que1.empty();
}
};
/**
* Your MyStack object will be instantiated and called as such:
* MyStack* obj = new MyStack();
* obj->push(x);
* int param_2 = obj->pop();
* int param_3 = obj->top();
* bool param_4 = obj->empty();
*/