栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

两个栈实现一个队列

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

两个栈实现一个队列

我们在面试的时候经常会遇到要求用两个栈实现一个队列,此篇文章直接搞定两个队列实现一个队列 

public class TwoStackImplQueue {
    Stack stack1 = new Stack();
    Stack stack2 = new Stack();
    //模拟队列的入队
    public void push(Integer value){
        //新添加的数据都放进第一个栈
        stack1.push(value);
    }
    //模拟队列的出队
    public Integer pop() throws Exception {
        //判断栈2是否为空,如果为空就去遍历栈1中的数据,把栈1中的数据依次放入栈2
        if(stack2.size()==0){
            //把栈1的数据拿光,栈1最底下的数据(最先进的数据),最后一个拿出,放在栈2的顶部(最先拿到),这不就是队列嘛
            while(stack1.size()>0){
                Integer top = stack1.pop();
                stack2.push(top);
            }
            //当拿光栈1的数据,栈2还是为空,只能说明栈确实空了
            if(stack2.size()==0){
                throw new Exception("queue is empty");
            }
        }
        //栈2不为空或栈1拿光放到栈2后,从栈2顶部拿值
        return stack2.pop();
    }


    public static void main(String[] args) throws Exception {
        TwoStackImplQueue twoStackImplQueue = new TwoStackImplQueue();
        twoStackImplQueue.push(222);
        twoStackImplQueue.push(2);
        twoStackImplQueue.push(999);
        System.out.println(twoStackImplQueue.pop());
    }



}

第一个栈只负责添加元素,第二个栈在弹出元素时,首先判断当前栈是否为空,若为空就直接将其第一个栈中的数据全部压入第二个栈中,然后输出栈顶元素,即可实现队列效果;若第二个栈中有数据,添加直接将其数据压入第一个栈中,输出时直接输出第二个栈顶的元素即可! 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/956266.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号