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

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

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

  • 相关阅读:
    userAgent判断当前设备类型
    h5+css3最简单的图片飞入以及淡入淡出效果
    ruby的form中常用的控件
    初识swipe.js
    后缀为7z的文件解码
    python all()函数
    flask web表单
    flask过滤器
    flask学习笔记1.21
    py学习笔记1.13、1.14
  • 原文地址:https://www.cnblogs.com/perfy576/p/8596959.html
Copyright © 2011-2022 走看看