劍指offer 5.用兩個棧實現隊列

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

  1. pop操作
    爲了使得數據先進後出,可以將數據先壓入棧1,再將棧1的數據按順序壓入棧2,那麼棧2的top就是需要輸出的“隊列”的top。而需要注意的是,如果棧2中仍有元素,需要先將棧2的元素彈出,只有將棧2的所有元素彈出後,才能將棧1的數據按順序壓入棧2。在本代碼中還進行了異常處理,如果棧1和棧2均爲空的話,那麼會拋出-1異常,並輸出“隊列爲空,無法進行出棧操作”。
  2. 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;
};
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章