这个可以和上一篇文章<<用两个栈实现队列>>对比着来学习。算法思想很简单,直接上代码吧:
#include<iostream>
#include<queue>
using namespace std;
template<typename T> class CStack{
private:
queue<T> q1;
queue<T> q2;
int nCount;
public:
CStack();
~CStack();
void appendTail(const T& data);
T deleteTail();
int GetNum() const;
};
template<typename T> CStack<T>::CStack()
{
nCount=0;
}
template<typename T> CStack<T>::~CStack(){}
template<typename T> void CStack<T>::appendTail(const T& data)
{
if(q1.size()==0 && q2.size()==0)
{
q1.push(data);
}
else if(q1.size()>0)
{
q1.push(data);
}
else if(q2.size()>0)
{
q2.push(data);
}
++nCount;
}
template<typename T> T CStack<T>::deleteTail()
{
T element;
if(q2.size()==0)
{
while(q1.size()!=1)
{
T& data=q1.front();
q1.pop();
q2.push(data);
}
element=q1.front();
q1.pop();
cout<<element<<endl;
}
else{
while(q2.size()!=1)
{
T& data=q2.front();
q2.pop();
q1.push(data);
}
element=q2.front();
q2.pop();
cout<<element<<endl;
}
--nCount;
return element;
}
int main()
{
CStack<int> stack1;
stack1.appendTail(1);
stack1.appendTail(2);
stack1.appendTail(3);
int DATA=stack1.deleteTail();
stack1.appendTail(4);
DATA=stack1.deleteTail();
DATA=stack1.deleteTail();
DATA=stack1.deleteTail();
system("pause");
return 0;
}