队列是先进先出,为了实现栈的先进后出原则,我们依旧采用两个队列来实现。
代码实现如下
template<class T>
class Stack
{
public:
void Push(const T& x)
{
if(q1.size() > 0)
q1.push(x);
else if(q2.size() > 0)
q2.push(x);
else
q1.push(x);
}
void Pop()
{
if(q1.size() == 0)
{
while(q1.size > 1)//当q1中的元素个数大于1时
{
q2.push(q1.front());
q1.pop();
}
q1.pop();
}
else
if(q2.size() == 0)
{
while(q2.size > 1)
{
q1.push(q1.front());
q2.pop();
}
q2.pop();
}
}
T& Top()
{
if(q1.size () > 0)
{
return q1.back ();
}
else if(q2.size () > 0)
{
return q2.back ();
}
}
private:
//两个队列成员
queue<T> q1;
queue<T> q2;
};
void Test()
{
Stack<int> s;
//s.Pop ();
s.Push (1);
s.Push (2);
cout<<s.Top ()<<endl;
s.Pop ();
//s.Pop();
s.Push (4);
cout<<s.Top ()<<endl;
}
int main()
{
Test();
system("pause");
return 0;
}