232.用栈实现队列
初见想法:两个stack, 一个做inqueue,一个做outqueue
class MyQueue {
public:
stack<int> in_queue;
stack<int> out_queue;
MyQueue() {}
void push(int x) {
in_queue.push(x);
}
int pop() {
if (out_queue.empty())
{
while (!in_queue.empty())
{
int x = in_queue.top();
in_queue.pop();
out_queue.push(x);
}
}
int x = out_queue.top();
out_queue.pop();
return x;
}
int peek() {
if (out_queue.empty())
{
while (!in_queue.empty())
{
int x = in_queue.top();
in_queue.pop();
out_queue.push(x);
}
}
return out_queue.top();
}
bool empty() {
return in_queue.empty() && out_queue.empty();
}
};
可以提高代码复用性,写一个in2out函数
225. 用队列实现栈
class MyStack {
public:
queue<int> q1; // 主要队列
queue<int> q2; // 辅助队列
MyStack() {}
void push(int x) {
q2.push(x);
while (!q1.empty())
{
q2.push(q1.front());
q1.pop();
}
swap(q1, q2);
// int n = q1.size();
// q1.push(x);
// for (int i = 0; i < n; i++)
// {
// q1.push(q1.front());
// q1.pop();
// }
}
int pop() {
int x = q1.front();
q1.pop();
return x;
}
int top() {
return q1.front();
}
bool empty() {
return q1.empty();
}
};
两个队列,q1主要队列,q2辅助队列。push的时候push到q2, 然后把q1的数据依次push过来
这里的关键操作就是swap函数,swap函数为queue自带的重载函数,可以交换两个queue内部的数据