您的位置:首页 > Web前端

《剑指offer》-- (4)用两个队列实现栈

2018-03-21 09:23 197 查看
题目描述:用两个栈实现队列,实现入栈和出栈。
代码:#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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: