方法一:双队列
1.1
class MyStack
{
private:
queue<int> q1;
queue<int> q2;
public:
MyStack() {}
void push(int x)
{
while (q2.empty() == false)
{
q1.push(q2.front());
q2.pop();
}
q2.push(x);
}
int pop()
{
int temp = q2.front();
q2.pop();
while (q1.empty() == false)
{
q2.push(q1.front());
q1.pop();
}
while (q2.size() > 1)
{
q1.push(q2.front());
q2.pop();
}
return temp;
}
int top()
{
return q2.front();
}
bool empty()
{
return q2.empty();
}
};
1.2
class MyStack
{
private:
queue<int> q1;
queue<int> q2;
public:
MyStack() {}
void push(int x)
{
q2.push(x);
while (q1.empty() == false)
{
q2.push(q1.front());
q1.pop();
}
swap(q1, q2);
}
int pop()
{
int temp = q1.front();
q1.pop();
return temp;
}
int top()
{
return q1.front();
}
bool empty()
{
return q1.empty();
}
};
方法二:一个队列
2.1
class MyStack
{
private:
queue<int> q;
public:
MyStack() {}
void push(int x)
{
int q_size = q.size();
q.push(x);
for (int i = 0; i < q_size; i++)
{
q.push(q.front());
q.pop();
}
}
int pop()
{
int temp = q.front();
q.pop();
return temp;
}
int top()
{
return q.front();
}
bool empty()
{
return q.empty();
}
};
2.2
class MyStack
{
private:
queue<int> q;
int head;
public:
MyStack() {}
void push(int x)
{
q.push(x);
head = x;
}
int pop()
{
for (int i = 1; i < q.size(); i++)
{
int temp = q.front();
q.pop();
q.push(temp);
head = temp;
}
int temp = q.front();
q.pop();
return temp;
}
int top()
{
return head;
}
bool empty()
{
return q.empty();
}
};