您的位置:首页 > 其它

用两个栈实现队列

2011-02-19 10:36 337 查看
题目是就用两个栈来实现队列....

思路还是比较清晰的,所以直接上代码.......

//用两个栈实现队列
#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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: