232.用栈实现队列
力扣题目链接
class MyQueue {
stack<int> stackIn;
stack<int> stackOut;
public:
MyQueue() {
}
void push(int x) {
stackIn.push(x);
}
int pop() {
if (stackOut.empty()) {
// 从stIn导入数据直到stIn为空
while(!stackIn.empty()) {
stackOut.push(stackIn.top());
stackIn.pop();
}
}
int result = stackOut.top();
stackOut.pop();
return result;
}
int peek() {
int res = this->pop(); // 直接使用已有的pop函数
stackOut.push(res); // 因为pop函数弹出了元素res,所以再添加回去
return res;
}
bool empty() {
return stackIn.empty() && stackOut.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 {
queue<int> Queue1;
queue<int> Queue2;
public:
MyStack() {
}
void push(int x) {
Queue1.push(x);
}
int pop() {
int size = Queue1.size();
size--;
while (size--) { // 将que1 导入que2,但要留下最后一个元素
Queue2.push(Queue1.front());
Queue1.pop();
}
int result = Queue1.front(); // 留下的最后一个元素就是要返回的值
Queue1.pop();
Queue1 = Queue2; // 再将que2赋值给que1
while (!Queue2.empty()) { // 清空que2
Queue2.pop();
}
return result;
}
int top() {
return Queue1.back();
}
bool empty() {
return Queue1.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();
*/