用两个栈实现一个队列

题目

使用两个栈模拟实现一个队列的功能。

思路

栈是“先进后出(FILO)”,队列是“先进先出(FIFO)”。栈的操作见:http://blog.csdn.net/u010902721/article/details/45748547
其中一个栈stack1固定用为push使用,另一个栈stack2固定用作pop使用。当stack2为空的时候,就将stack1中的元素逐个出栈,直接push到stack2中。这样就可以执行pop操作了。

代码

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

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

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

测试

测试的时候主要测元素从stack1向stack2转移的代码。push和pop操作交替执行,查看相应结果。经测试,上述代码没什么问题。

你可能感兴趣的:(队列,stack)