队列的特性是先进先出,栈是先进后出基于这种特性可以用一个辅助栈用于在pop和front是的操作其他的操作都可以用一个栈实现
在pop或front时将数据逐个出栈并且入到辅助栈中此时辅助栈的栈顶就是需要pop或front的元素之后再将元素放回原来的栈
在pop或front时
完成后将元素放入原栈
template<typename T>
class Queue
{
public:
Queue()
{}
Queue(const Queue<T>& q)
:s1(q.s1)
,s2(q.s2)
{}
Queue<T>& operator=(const Queue<T>& q)
{
s1 = q.s1;
s2 = q.s2;
}
~Queue()
{}
public:
bool Empty()
{
return s1.empty();
}
size_t Size()
{
return s1.size();
}
T Front()
{
if (!Empty())
{
while (!s1.empty())
{
s2.push(s1.top());
s1.pop();
}
T tmp = s2.top();
while (!s2.empty())
{
s1.push(s2.top());
s2.pop();
}
return tmp;
}
return s1.top();
}
T Back()
{
return s1.top();
}
void Push(T t)
{
s1.push(t);
}
void Pop()
{
while (!s1.empty())
{
while (!s1.empty())
{
s2.push(s1.top());
s1.pop();
}
s2.pop();
while (!s2.empty())
{
s1.push(s2.top());
s2.pop();
}
}
}
private:
stack<T> s1;
stack<T> s2;
};