zoukankan      html  css  js  c++  java
  • (二)数组队列

    目录


    前言

    实现自己的 数组队列,底层利用之前实现的 动态数组 ;实现的接口和 java 队列实现的接口,基本一致 ;在 动态数组 的基础上进行二次封装,很简单;


    已实现方法

    写个鸡儿的描述,谁看呢


    复杂度分析

    对于 deQueue() 的复杂度是 O(n) ,因为,每次移走队首元素,我们都要让后面的元素,移上来,这对于数组来说,是个很费时的操作 ;

    我们是可以利用 循环队列deQueue() 的复杂度降低到 O(1)


    java代码

    ---------------- 队列接口 -----------------
    
    package xin.ijava.quene;
    
    /**
     *  
     *   队列抽取的接口
     *    @author An
     */
    @SuppressWarnings("unused")
    public interface Queue<E> {
    
        /**
         * 获取队列中的实际元素个数
         * @return 元素个数
         */
        int getSize()  ;
    
        /**
         *   队列是否为空
         * @return  队列的情况
         */
        boolean isEmpty() ;
    
        /**
         * 获取当其队列的队首元素
         * @return 队首元素
         */
        E getFront();
    
        /**
         * 移除当前队首元素
         * @return  队首元素
         */
        E deQueue() ;
    
        /**
         * 将元素添加到 队尾
         * @param e 目标元素
         */
        void enQueue(E e) ;
    
    }
    
    
    ------------- 数组队列 实现类 --------------
    
    package xin.ijava.quene;
    
    import xin.ijava.array.Array;
    
    /**
     * 数组队列,底层利用动态数组实现
     * <p>
     * ------------- 复杂度分析 -------------
     * <p>
     * getSize()    O(1) :
     * isEmpty()    O(1) ;
     * deQueue()    O(n)  ;
     * enQueue()    O(1) 均摊 ;
     * getFront()   O(1) ;
     * <p>
     * 除了  deQueue() 的复杂度为: O(n) ,其他都是常数级别的复杂化的 ;
     * 对于 deQueue()  的复杂度,可以使用循环队列,将其 复杂度降低到 O(1) ;
     *
     * @author An
     */
    @SuppressWarnings("unused")
    public class ArrayQueue<E> implements Queue<E> {
        /**
         * 底层维护着一个  Array  动态数组
         */
        private Array<E> array;
    
    
        public ArrayQueue() {
            array = new Array<E>();
        }
    
        public ArrayQueue(int capacity) {
            array = new Array<E>(capacity);
        }
    
        @Override
        public int getSize() {
            return array.getSize();
        }
    
        @Override
        public boolean isEmpty() {
            return array.isEmpty();
        }
    
        @Override
        public E getFront() {
            return array.getFirst();
        }
    
        @Override
        public E deQueue() {
            return array.removeFirst();
        }
    
        @Override
        public void enQueue(E e) {
            array.addLast(e);
        }
    
        @Override
        public String toString() {
            StringBuilder res = new StringBuilder();
            res.append(String.format("ArrayQueue : size = %d , capacity = %d 
    ", getSize(), array.getCapacity()));
            res.append("Front [ ");
            for (int i = 0; i < getSize(); i++) {
                res.append(array.get(i));
                if (i != getSize() - 1) {
                    res.append(", ");
                }
            }
            res.append(" ] Tail ");
            return res.toString() ;
        }
    }
    
  • 相关阅读:
    Feign性能优化注意事项--超时
    Android MVP+Retrofit+dagger2+RxAndroid框架整合
    Android adb命令,linux中各种命令
    【视频音频】雷霄骅开源视音频项目汇总
    Android LitePal介绍与使用说明
    AndroidStudio第一次提交项目代码到git服务器/github
    Android框架之路——Fragmentation的使用(流式交互Demo)
    Android Studio 升级到3.0后出现编译错误.gradlecaches ransforms-1files-1.1*****-release.aar
    Android Studio你必须学会的快捷键(Eclipse转AS必看)
    Intellij IDEA常用配置详解
  • 原文地址:https://www.cnblogs.com/young-youth/p/11665676.html
Copyright © 2011-2022 走看看