JZ9-题解 | #用两个栈实现队列#

用两个栈实现队列

http://www.nowcoder.com/practice/54275ddae22f475981afa2244dd448c6

题目描述


用两个栈来实现一个队列,使用n个元素来完成 n 次在队列尾部插入整数(push)和n次在队列头部删除整数(pop)的功能。 队列中的元素为int类型。保证操作合法,即保证pop操作时队列内已有元素.


题解:栈1用来存放元素,栈2用来出栈。

算法思路:

  1. 栈1只用于存放入队列的元素,其顺序同队列相反
  2. 栈2为空时候,将栈1所有元素都出栈存放入栈2中,此时,栈2顺序同队列相同。
  3. 出栈时候,先判断栈2是否为空,若不为空,则将余下的元素出栈,顺序同队列。注意:此时不能将栈1元素入栈2中,会破坏顺序;若为空,将栈1所有元素入栈2中,然后再进行出栈队列元素。

代码:

class Solution
{
public:
    void push(int node) {
//         stack1.push(node);
        stack1.push(node);//入栈
    }
    int pop() {
        //当stack2为空的时候,把所有stack1中元素入栈,其顺序恰好同队列
        if(stack2.empty()){
            while(!stack1.empty()){
                stack2.push(stack1.top());//栈1元素入栈2中
                stack1.pop();//栈1元素出栈
            }
        }
        //如果不为空,就不在往栈2中存放元素,只有在栈2元素出栈完毕之和,在存放
        //不为空时,栈2元素出栈顺序是同队列一样的
        int result = stack2.top();
        stack2.pop();
        return result;
    }
private:
    stack<int> stack1;
    stack<int> stack2;
};



全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务