实现两个队列,完成栈的操作。
代码如下:
#include <iostream>
#include <queue>
#include <exception>
using namespace std;
template <typename T>class CStack
{
public :
CStack();
~CStack();
void push(const T&node);
T pop();
int getcount();
private:
int count;
queue<T> que1;
queue<T> que2;
};
template <typename T>
CStack<T>::CStack(){
count=0;
}
template <typename T>
CStack<T>::~CStack(){}
template <typename T>
int CStack<T>::getcount(){
return count;
}
template <typename T>
void CStack<T>::push(const T& node){
que1.push(node);
count++;
}
template <typename T>
T CStack<T>::pop(){
T result;
if(que1.size()==0){
if(que2.size()==0)
throw new exception("stack is empty!");
while(que2.size()>1)
{
T temp=que2.front();
que1.push(temp);
que2.pop();
}
result=que2.front();
que2.pop();
}
else
{
while(que1.size()>1)
{
T temp=que1.front();
que2.push(temp);
que1.pop();
}
result=que1.front();
que1.pop();
}
count--;
return result;
}
void main(){
CStack<int> sta;
sta.push(3);
sta.push(5);
sta.push(7);
sta.push(8);
int temp;
while(sta.getcount()>0)
{
temp=sta.pop();
cout<<temp<<"\t";
}
}
/*
*输出结果:
*8 7 5 3
*/