一、第一方法:使用两个队列
问题关键在于push,双队列解决push的方法就是始终让一个队列保持为空,另一个队列保持栈的先进后出的排放。在一个新元素进栈时,让新元素进入空队列,然后按照栈的顺序依次让另一个队列的元素放入空队列。
class MyStack {
private:
queue<int>In,Out;
public:
MyStack() {
}
void push(int x) {
Out.push(x);
while(!In.empty())
{
Out.push(In.front());
In.pop();
}
swap(In,Out);
}
int pop() {
int Temp=In.front();
In.pop();
return Temp;
}
int top() {
return In.front();
}
bool empty() {
return In.empty();
}
};
二、第二种方法:使用一个队列
使用一个队列的方法和第一种方法略有不用,但道理差不多即是让队列中的元素保持先进后出。因此我们在放入一个新元素时,为了让新元素先出,新元素的位置必须是front。
class MyStack {
private:
queue<int>que;
public:
MyStack() {
}
void push(int x) {
int size=que.size();
que.push(x);
for(int i=0;i<size;i++)//新元素前面有size个元素,故全部按顺序放后面
{
que.push(que.front());
que.pop();
}
}
int pop() {
int Temp=que.front();
que.pop();
return Temp;
}
int top() {
return que.front();
}
bool empty() {
return que.empty();
}
};