zoukankan      html  css  js  c++  java
  • 剑指offer-7.用两个栈实现队列

    0 题目

    用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。

    1 分析

    栈符合先进后出,而队列符合先进先出。

    压入栈A元素,pop的时候,应该弹出的是栈A底的元素,在pop是栈A底第二个元素。。。

    因此,如果将栈A的元素pop,然后压入栈B。此时栈A底的元素变为栈B的顶元素,正事要pop的元素。

    2 实现

    class Solution
    {
    public:
        void push(int node) { //都压入第一个栈
            stack1.push(node);
        }
        int pop() { //当第二个栈中元素没有的时候,弹出第一个栈的,压入第二个栈。
            if(stack2.empty())
            {
                if(stack1.empty())
                {
                    
                }else{
                    while(!stack1.empty())
                    {
                        stack2.push(stack1.top());
                        stack1.pop();
                    }
                }
            }
            int ret = stack2.top();
            stack2.pop();
            return ret;
        }
    
    private:
        stack<int> stack1;
        stack<int> stack2;
    };
    

      

    2 拓展

    使用两个队列实现一个栈。

    思路也是相同的,都往队列A中压,从B中弹出。要弹出的元素在队列A的位置。

    即使将A的弹出,压入B,尾元素还是在尾元素。

    因此需要一个字段记录一个的元素个数,然后再最后一个元素的时候弹出。每次弹出,都需要倒腾一次。

    因此两个队列实现一个栈,是一种很低效的方式。

  • 相关阅读:
    敏捷开发感想
    团队分工
    My Partner‘s Code View
    课堂上面的练习
    APP测试用例
    Android App测试计划和设计测试矩阵
    BugReport-智慧农业APP
    图书管理系统的活动图和时序图
    图书管理系统用例图
    对图书管理系统5W1H的分析
  • 原文地址:https://www.cnblogs.com/perfy576/p/8596959.html
Copyright © 2011-2022 走看看