用两个栈实现队列
题目是就用两个栈来实现队列....
思路还是比较清晰的,所以直接上代码.......
//用两个栈实现队列
#include<iostream>
#include<stack>
using namespace std;
template <typename T> class MyQueue{
public:
MyQueue(){};
T pop();
void push(T);
bool empty();
private:
stack<T> stack1; //用于入队和入队
stack<T> stack2; //用于出队
};
template<typename T> T MyQueue<T>::pop(){ //出队
T temp;
if(!stack2.empty()){temp=stack2.top();stack2.pop();}
else{
if(stack1.empty()) {cout<<"error"<<endl;return 0;}
else{
while(!stack1.empty()){
stack2.push(stack1.top());
stack1.pop();
}
temp=stack2.top();
stack2.pop();
}
}
return temp;
}
template<typename T> void MyQueue<T>::push(T t){ //入队
stack1.push(t);
return;
}
template<typename T> bool MyQueue<T>::empty(){
/*if(stack1.empty()&&stack2.empty()) return true;
else return false;*/
return stack1.empty()&&stack2.empty()?true:false;
}
void test(MyQueue<int> q){ //测试
int data[]={1,2,3,4,5,6,7,8,9,10};
for(int i=0;i<=6;i++)
q.push(data[i]);
for(int i=0;i<=5;i++)
cout<<q.pop()<<" ";
cout<<endl;
for(int i=7;i<=9;i++)
q.push(data[i]);
while(!q.empty()){
cout<<q.pop()<<" ";
}
cout<<endl;
return;
}
int main(void){
MyQueue<int> q;
test(q);
system("pause");
return 0;
}

浙公网安备 33010602011771号