两个栈实现一个队列 元编程 C++
#include<iostream>
#include<stack>
using namespace std;
template<typename T>
struct queue{
	stack<T> s1;
	stack<T> s2;
	void push_queue(const T& val);
	void pop_queue();
	bool empty();
	const T& back();
};
template<typename T>
void queue<T>::push_queue(const T& val){
	s1.push(val);
}
template<typename T>
void queue<T>::pop_queue(){
	if(s2.empty()){
		while(!s1.empty()){
		s2.push(s1.top());
		s1.pop();
		}
	}
	s2.pop();
}
template<typename T>
bool queue<T>::empty(){
	return s1.empty()&&s2.empty();
}
template<typename T>
const T& queue<T>::back(){
	if(s2.empty()){
		while(!s1.empty()){
			s2.push(s1.top());
			s1.pop();
		}
	}
	return s2.top();
}
int main()
{
	queue<int> q;
	int in;
	cout<<"入队1,出队2,查看 3"<<endl;
	
	while(cin>>in){
		switch(in){
			case 1: 
				cout<<"入队:";
				cin>>in;
				q.push_queue(in);
				cout<<"入队元素:"<<in<<endl;
				break;
			
			
			case 2: 
				cout<<"出队元素:";
				cout<<q.back()<<endl;
				q.pop_queue();
				
				break;
			
			case 3: 
				cout<<"队列元素分别是:"<<endl;
				while(!q.empty()){
					cout<<q.back()<<endl;
					q.pop_queue();
				}
		}
		cout<<"入队1,出队2,查看 3"<<endl;
	}
}
 
                     
                    
                 
                    
                 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号