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();
        }
    }
    

      

  • 相关阅读:
    poj 3278 catch that cow
    POJ 1028 Web Navigation
    poj 2643 election
    hdu 1908 double queues
    hdu_2669 Romantic(扩展欧几里得)
    0/1背包 dp学习~6
    校验码
    最长上升子序列(LIS经典变型) dp学习~5
    LCS最长公共子序列~dp学习~4
    最长上升子序列(LIS) dp学习~3
  • 原文地址:https://www.cnblogs.com/dashenaichicha/p/12540067.html
Copyright © 2011-2022 走看看