这道题的目标是用两个栈实现队列的功能。在求解问题之前,需要知道队列是先进先出,而栈是先进后出,所以为了实现这个功能,思路如下:
- pop操作
为了使得数据先进后出,可以将数据先压入栈1,再将栈1的数据按顺序压入栈2,那么栈2的top就是需要输出的“队列”的top。而需要注意的是,如果栈2中仍有元素,需要先将栈2的元素弹出,只有将栈2的所有元素弹出后,才能将栈1的数据按顺序压入栈2。在本代码中还进行了异常处理,如果栈1和栈2均为空的话,那么会抛出-1异常,并输出“队列为空,无法进行出栈操作”。 - push操作
将数据按顺序压入栈1即可。
class Solution
{
public:
void push(int node) {
stack1.push(node);
return ;
}
int pop() {
int result = 0;
if (!stack2.empty()) {
result = stack2.top();
stack2.pop();
return result;
}
try {
// 如果两个栈均为空,则异常处理,抛出-1异常
if (stack1.empty()) {
throw -1;
} else {
while (!stack1.empty()) {
stack2.push(stack1.top());
stack1.pop();
}
return pop ();
}
} catch (int e) {
cout << "队列为空,无法进行出栈操作" << endl;
}
return 0;
}
private:
stack<int> stack1;
stack<int> stack2;
};