题目描述:用两个栈实现队列,实现入栈和出栈。
代码:
#include<iostream>
#include<stack>
#include<queue>
using namespace std;
//用两个队列实现栈
template<typename T>
class CStack
{
public:
CStack(void)
{
que1_used=true;
que2_used=false;
}
~CStack(void){}
void MyPush(T value);//入栈
T MyTop();//出栈
private:
queue<T> queue1;
queue<T> queue2;
bool que1_used;//记录queue1是否允许入队
bool que2_used;//记录queue2是否允许入队
};
//入栈
template<typename T>
void CStack<T>::MyPush(T value)
{
if(que1_used==true)
queue1.push(value);
if(que2_used==true)
queue2.push(value);
}
//出栈
template<typename T>
T CStack<T>::MyTop()
{
T data;
if(!queue1.empty() && que1_used==true)
{
while(queue1.size()>1)
{
data=queue1.front();
queue1.pop();
queue2.push(data);
}
data=queue1.front();
queue1.pop();
que1_used=false;
que2_used=true;
}
else if(!queue2.empty() && que2_used==true)
{
while(queue2.size()>1)
{
data=queue2.front();
queue2.pop();
queue1.push(data);
}
data=queue2.front();
queue2.pop();
que1_used=true;
que2_used=false;
}
else
cout<<"stack top error!"<<endl;
return data;
}
int main()
{
CStack<int> st;
st.MyPush(10);
st.MyPush(11);
st.MyPush(12);
st.MyPush(13);
st.MyPush(14);
cout<<"head="<<st.MyTop()<<endl;
cout<<"head="<<st.MyTop()<<endl;
cout<<"head="<<st.MyTop()<<endl;
st.MyPush(140);
cout<<"head="<<st.MyTop()<<endl;
cout<<"head="<<st.MyTop()<<endl;
cout<<"head="<<st.MyTop()<<endl;
return 0;
}