一.双栈实现队列
1.思路原理:队列的特点,先进先出;栈的特点,后进先出;原理刚好相反,那么无非是俩个栈互相“倒“或者“导”,这都不是重点了,有了这个初步思路我们就得想办法来实现如何倒了。
2“倒”或者“导”思路图:
法①:核心原理:每次插入都得倒回popstack栈的所有元素,最后所有的元素回归popstack
法一代码:
template<class T>
class QueueByTwoStack
{
public:
void Push(const T& data)
{
while (!PopStack.empty())
{
PushStack.push(PopStack.top());
PopStack.pop();
}
PushStack.push(data);
while (!PushStack.empty())
{
PopStack.push(PushStack.top());
PushStack.pop();
}
}
void Pop()
{
assert(!PopStack.empty());
PopStack.pop();
}
T& Front()
{
return PopStack.top();
}
size_t Size()
{
return PopStack.size() + PushStack.size();
}
bool Empty()
{
return (PopStack.empty() && PushStack.empty());
}
protected:
stac