zoukankan      html  css  js  c++  java
  • 剑指Offer(栈和队列)-用两个栈实现队列

      (用两个栈实现队列)题目描述:


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


      对于栈的数据结构,元素在里面是先进后出的,比如输入数据{a,b,c},这样的一行数据希望利用两个栈来实现,以最终队列的形式,那么就得先进先出,而在栈中,最先输入进去的a是在栈底的位置的,所以要让队列实现里面有pop操作那么就得让a先出来,所以在此之前先对栈一进行压栈操作,由于a在最底层,所以需要将b,c都弹出来,弹出来的数据压栈到stack2里面,这样子在stack2中就是{c,b},此时队列pop出来了a元素,现在需要得到本来先进去的b,然后c,所以直接将Stack2的元素pop出来就行了。结论可以总结为:

      (1)当插入时,直接插入 stack1。

      (2)当弹出时,当 stack2 不为空,弹出 stack2 栈顶元素,如果 stack2 为空,将 stack1 中的全部数逐个出栈入栈 stack2,再弹出 stack2 栈顶元素。

           

       实现:push操作就将所有的元素都先压进stack1里面,pop操作就是先判断stack2里面是否存在有元素,如有先弹出,没有的话就一直将stack1里面的元素全部弹出来再压进stack2。

    import java.util.Stack;
    
    public class Solution {
        Stack<Integer> stack1 = new Stack<Integer>();
        Stack<Integer> stack2 = new Stack<Integer>();
        
        public void push(int node) {
            stack1.push(node);
        }
        
        public int pop() {
            if(stack2.size()<=0){
                while(stack1.size()!=0){
                    stack2.push(stack1.pop());
                }
            }
            return stack2.pop();
        }
    }
    

      

  • 相关阅读:
    LRT最大似然比检验
    EPNP理论分析
    奇异值SVD分解
    矩阵求导
    static_cast和dynamic_cast用法
    Django 使用 Celery 实现异步任务
    python爬虫实战一:分析豆瓣中最新电影的影评
    scrapy模拟登陆知乎--抓取热点话题
    一个小时搭建一个全栈Web应用框架(上)
    一个小时搭建一个全栈 Web 应用框架(下)——美化与功能
  • 原文地址:https://www.cnblogs.com/dashenaichicha/p/12540067.html
Copyright © 2011-2022 走看看