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 result=this->pop();
stOut.push(result);
return result;
}
bool empty() {
return stIn.empty()&&stOut.empty();
}
};
- 一个入栈、一个出栈模拟队列
- 使用this指针后面用->而不是.
- 复用思想,功能相近的模块抽象出来,而不是复制粘贴
225. 用队列实现栈
class MyStack {
public:
queue<int>que;
MyStack() {
}
void push(int x) {
que.push(x);
}
int pop() {
int size=que.size()-1;
while(size--){//头部元素从后面压入
que.push(que.front());
que.pop();
}
int result=que.front();
que.pop();
return result;
}
int top() {
return que.back();
}
bool empty() {
return que.empty();
}
};
- 出队模拟:元素取出再加入
- front、top操作只是取元素的值,并不移动