《剑指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;
}
代码:#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;
}
相关文章推荐
- 剑指offer 面试题7 用两个栈实现队列
- 剑指offer系列之5:用两个栈来实现队列
- 《剑指offer》:[7]两个队列实现栈的C++代码实现
- 《剑指offer》——用两个栈实现队列
- 剑指offer——用两个堆栈实现一个队列
- 剑指offer-面试7:用两个栈实现队列(栈和队列)
- 剑指offer-用两个栈实现队列
- 剑指offer :07 用两个栈实现队列
- 用两个栈实现队列(剑指offer)
- 《剑指offer》面试题七 用两个栈实现队列
- 剑指offer 之 两个栈来实现一个队列
- JAVA实现用两个栈来实现一个队列,完成队列的Push和Pop操作(《剑指offer》)
- 剑指Offer编程练习005——用两个栈实现队列
- 面试题07_用两个栈实现队列——剑指offer系列
- 剑指offer面试题7:用两个栈实现队列
- 用两个栈实现队列(剑指Offer)
- 剑指offer_用两个栈实现队列
- 剑指offer面试题7(java实现):用两个栈实现队列
- 剑指Offer系列-面试题7:用两个栈实现队列
- 剑指Offer:面试题7——用两个栈实现队列(java实现)