说明:编程菜鸟一枚,学习左程云老师的《程序员代码面试指南》过程中将书中的例子改写成C++实现
题目:
编写一个类,用两个栈来实现队列,支持队列的基本操作(add,poll,peak).
实现:
两个栈,一个作为压入栈,压入数据时只往这个栈压入,记为stackPush;另一个栈只作为弹出栈,在弹出数据时只从这个栈弹出,记为stackPop。操作必须注意以下两点:
1.如果stackPush要往stackPop压入数据,那么必须一次性把stackPush中数据全部压入。
2.如果stackPop不为空,stackPush绝对不能向stackPop压入数据。
代码:
template <class T>
class twoStacksQueue{
public:
void add(int num){
stackpush.push(num);
};
int poll(){
if(stackpush.empty() && stackpop.empty()){
cout<<"The queue is empty"<<endl;
}
else if(stackpop.empty()){
while(!stackpush.empty()){
stackpop.push(stackpush.top());
stackpush.pop();
}
}
return stackpop.pop();
};
int peek(){
if(stackpush.empty() && stackpop.empty()){
cout<<"The queue is empty"<<endl;
}
else if(stackpop.empty()){
while(!stackpush.empty()){
stackpop.push(stackpush.top());
stackpush.pop();
}
}
return stackpop.top();
};
private:
stack<int> stackpush;
stack<int> stackpop;
};