剑指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;
};
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章