zoukankan      html  css  js  c++  java
  • 由两个栈组成的队列

    题目

    编写一个类,用两个栈实现队列,支持队列的基本操作(add, poll, peek)

    要求

    思路

    使用两个栈,栈A用于add,栈B用于poll和peek,add的时候,往栈A中push元素,poll时,如果栈B不是空,则弹出最顶元素,如果为空则将栈A的所有元素pop,然后push到栈B中。这样就可以实现队列的功能了。

    代码

    package com.github.zhanyongzhi.interview.algorithm.stacklist;
    
    import java.util.Stack;
    
    /**
     * 用两个栈实现队列
     * @author zhanyongzhi
     */
    public class TwoStackQueue<T> {
        private Stack<T> pushStack = new Stack<T>();
        private Stack<T> popStack = new Stack<T>();
    
        public T add(T item){
            pushStack.push(item);
            return item;
        }
    
        public T poll(){
            if(popStack.empty()){
                moveStack();
            }
    
            if(!popStack.empty())
                return popStack.pop();
    
            return null;
        }
    
        public T peek(){
            if(popStack.empty()){
                moveStack();
            }
    
            if(!popStack.empty())
                return popStack.peek();
    
            return null;
        }
    
        private void moveStack(){
            int count = pushStack.size();
            for(int i=0; i<count; i++){
                T item = pushStack.pop();
                popStack.push(item);
            }
        }
    }
    

    在github中查看

  • 相关阅读:
    Swift编码总结4
    Swift编码总结3
    无题
    WebSocket桌面客户端工具
    Dell U2913WM使用感受
    Oracle DB 12c first glance
    [翻译] Oracle Database 12c 新特性Multitenant
    一眨眼oracle 12c也有了
    .Net内存泄露原因及解决办法
    .NET 强引用和弱引用
  • 原文地址:https://www.cnblogs.com/xiaohunshi/p/5680782.html
Copyright © 2011-2022 走看看