template<typename T> class CStack
{public:
CStack(void);
~CStack(void);
void PushStack(const T& node);
bool PopStack(T &data);
private:
queue<T> q1;
queue<T> q2;
};
template <typename T> CStack<T>::CStack(void)
{
}
template <typename T> CStack<T>::~CStack(void)
{
}
template<typename T> void CStack<T>::PushStack(const T &element)
{
if(q1.empty() && q2.empty())
{
q1.push(element);
return;
}
if(!q1.empty())
{
q1.push(element);
}
if(!q2.empty())
{
q2.push(element);
}
}
template<typename T> bool CStack<T>::PopStack(T &data)
{
if(!q1.empty())
{
while(!q1.empty())
{
data = q1.front();
if(q1.size() != 1)
q2.push(data);
q1.pop();
}
return true;
}
if(!q2.empty())
{
while(!q2.empty())
{
data = q2.front();
if(q2.size() != 1)
q1.push(data);
q2.pop();
}
return true;
}
return false;
}
void test()
{
CStack<int> tt;
int a[4] = {11,42,4,44};
printf("queue array:\n");
for(int i=0;i<4;i++)
{
printf("%d ",a[i]);
}
printf("\n");
for(int i=0;i<4;i++)
{
tt.PushStack(a[i]);
}
printf("stack pop:\n");
int temp = 0;
for(int i=0;i<4;i++)
{
tt.PopStack(temp);
printf("%d ",temp);
}
printf("\n");
}