思路
思考其实很普遍,就是定义两个栈,一个作入栈,一个作出栈。定义成只能从入栈入,出栈出就是队列了。只不过中间还要根据条件判断把入栈元素转入出栈以便倒置成先进先出罢了。
代码没仔细检查,运行过没啥问题,应该没错。
#include <iostream>
#include <stack>
template<class T>
class Queue{
public:
Queue(){};
void push(T x);
T pop();
private:
std::stack <T> s1;//入栈
std::stack <T> s2;//出栈
T temp;
};
template<class T>
void Queue<T>::push(T x){
s1.push(x);
std::cout<<x<<" input successfully!!!"<<std::endl;
}
//四种情况。 1.出入不空,2.出空入不空,3.入空出不空 4.出入空
template<class T>
T Queue<T>::pop(){
if(s1.empty()&&s2.empty()){
std::cout<<"the queue is empty,can not pop "<<std::endl;
return false;
}
if(s2.size()==0&&s1.size()!=0){//若是2.出空入不空,入栈转移到出栈。
while(s1.size()!=0){
temp=s1.top();
s1.pop();
s2.push(temp);
}
}
temp=s2.top();//只要出不空,就直接从出栈里出队
s2.pop();
std::cout<<temp<<" output successfully!!!"<<std::endl;
return temp;
}
int main(){
Queue<int> queue;//初始化队列
queue.push(2);//测试
queue.push(8);
queue.pop();
queue.pop();
queue.pop();
queue.push(10086);
return 0;
}