程序员修炼-剑指offer之用两个栈实现队列 - 新闻资讯 - 云南小程序开发|云南软件开发|云南网站建设-昆明葵宇信息科技有限公司

159-8711-8523

云南网建设/小程序开发/软件开发

知识

不管是网站,软件还是小程序,都要直接或间接能为您产生价值,我们在追求其视觉表现的同时,更侧重于功能的便捷,营销的便利,运营的高效,让网站成为营销工具,让软件能切实提升企业内部管理水平和效率。优秀的程序为后期升级提供便捷的支持!

您当前位置>首页 » 新闻资讯 » 技术分享 >

程序员修炼-剑指offer之用两个栈实现队列

发表时间:2020-10-19

发布人:葵宇科技

浏览次数:32

之前写过一遍栈的实现,今天说说怎么用栈实现队列的功能

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

首先做题前明确思路,再动手码代码。
1.队列是先进先出,而栈是先进后出
2.实现队列就是实现队列的两个操作,入队和出队

使用两个栈stack1和stack2,stack1模拟入队,stack2模拟出队
操作思路如下:
1.入队操作,直接将数据压入stack1栈即可。

void push(int node) {
        stack1.push(node);
    }

2.出队操作,若stack2不为空,直接弹出栈顶元素,若不为空,将stack1所有元素弹入stack2之后,再弹出stack2栈顶元素。
这里稍稍要思考的一个地方就是,当stack2为空时的操作思路,因为队列是先进先出的,往stack2里面放元素时,需要把stack1最先进入的元素最后放,这样它就在栈顶了,就满足先进先出的原则了,想通这一点就很好写代码了

int pop() {
        int a;//用一个元素保存stack1弹出的元素
        if(stack2.empty())
        {//stack2为空时,依次把stack1的栈顶元素压入stack2
            while(!stack1.empty())
            {
                a = stack1.top();
                stack2.push(a);
                stack1.pop();
            }
        }
        //stack2不为空,则直接弹出栈顶元素
        a = stack2.top();
        stack2.pop();
        return a;
    }

图解该过程,这三句代码的作用如下,元素的位置发生了改变,最先进入的元素1,变成了栈顶元素,满足了先进先出原则

在这里插入图片描述

相关案例查看更多