两个栈实现一个队列 元编程 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;
}
}

posted @ 2022-06-11 15:43  danieldai  阅读(13)  评论(0编辑  收藏  举报