5. 用两个栈实现队列

/*问题五:用两个栈实现队列。完成队列的push和pop操作,队列中的元素为int类型。*/

/*思路:栈是先进后出,队列是先进先出。本题中一个队列是由两个栈来实现的。首先,
元素node1进队,我们可以先压入栈1,然后是node2,接着压入栈1,假设有三个元素入队,
则栈1中有三个元素,node1-3,但是node3在栈顶;然后,元素出队,队列是先进先出,所
以先出的应该是node1,而node1在栈1的最底部,这时注意到,栈2为空,还没有用上,我们
可以将栈1的元素从顶向下依次压入栈2,现在,node1就位于栈2的顶部了,直接pop就可以了。
注意:如果队列一直有进队和出队的操作的话,(进和出的数量不一定相等),假如栈2不为
空,那么我们可以直接pop栈2中的数据,不用将新压入栈1中的数据压入栈2再pop了(新压入
栈2的数据会先被pop出去),因为栈2中原有的数据肯定是最先进入队列的,将栈2中原有的数

据pop出去就可以了。*/

class Solution
{
public:
    void push(int node) {
        stack1.push(node);
    }

    int pop() {
        int a;
        if(stack2.empty()){
            while(!stack1.empty()){
                a = stack1.top();
                stack2.push(a);
                stack1.pop();
            }
        }
        a = stack2.top();
        stack2.pop();
        return a;
    }

private:
    stack<int> stack1;
    stack<int> stack2;
};

猜你喜欢

转载自blog.csdn.net/weixin_39605679/article/details/80864467