方法:
两个队列互相倒换数据,我们只在一个队列中放入数据,另一个队列担当倒换的容器。pop()数据时删除不为空队列元素的最后一个;访问栈顶时,我们只需要调用标准库函数back()即可。
#pragma once
#include<queue>
template <typename T>
class StackByTwoQueue
{
public:
void StackByTwoQueuePush(T data)//入栈
{
if (!q1.empty()) {
q1.push(data);
}
else{
q2.push(data);
}
}
void StackByTwoQueuePop()//出栈
{
if (q2.empty()) {
size_t count = q1.size() - 1;
for (size_t i = 0; i < count; ++i) {
q2.push(q1.front());
q1.pop();
}
q1.pop();
}
else {
size_t count = q2.size() - 1;
for (size_t i = 0; i < count; ++i) {
q1.push(q2.front());
q2.pop();
}
q2.pop();
}
}
T StackByTwoQueueTop()//访问栈顶
{
if (q2.empty()) {
return q1.back();
}
else {
return q2.back();
}
}
bool StackByTwoQueueEmpty()//栈是否为空
{
return q1.empty() + q2.empty();
}
private:
std::queue<T> q1;
std::queue<T> q2;
};