• 剑指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,尾元素还是在尾元素。

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

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

  • 相关阅读:
    springboot的@EnableAutoConfiguration起作用的原理
    springboot加载bean过程探索
    dubbo源码阅读笔记-如何引用远程服务,变成invoker
    HashMap如何实现序列化
    如果处理缓存失效从数据库加载数据
    redis设计原则
    redis相关运维命令
    spring的compentScan注解扫描类机制
    全文检索技术
    前端设计网站
  • 原文地址:https://www.cnblogs.com/perfy576/p/8596959.html
Copyright © 2020-2023  润新知