這道題的目標是用兩個棧實現隊列的功能。在求解問題之前,需要知道隊列是先進先出,而棧是先進後出,所以爲了實現這個功能,思路如下:
- 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;
};