zoukankan      html  css  js  c++  java
  • 手写数据结构-基于动态数组的队列

    1.队列基础
    • 队列是一种先进先出的数据结构(先到先得 First In First Out)

    • 队列也是一种线性结构

    • 相比于数组,队列对应的操作是数组的子集

    • 只能从一端(队尾)添加元素,从另一端(队首)取出元素

    2.手写基于动态数组的队列及复杂度分析
    package com.tc.javabase.datastructure.array.queue;
    
    import com.tc.javabase.datastructure.array.ArrayList;
    import com.tc.javabase.datastructure.queue.Queue;
    
    /**
     * 基于动态数组实现的队列
     *
     *  结构特性:先进先出
     *
     * 采用头指针和尾指针的方式实现基于静态数组的循环队列
     *  * 时间复杂度分析:
     *  *  入队:O(1)
     *  *  出队:O(n)
     *  *  查询队首元素:O(1)
     *
     * @param <E>
     */
    public class ArrayQueue<E> implements Queue<E> {
    
        private ArrayList<E> arrayList;
    
        public ArrayQueue(int capacity){
            arrayList = new ArrayList<>(capacity);
        }
    
        public ArrayQueue(){
            arrayList = new ArrayList<>();
        }
    
        @Override
        public int getSize(){
            return arrayList.getSize();
        }
    
        @Override
        public boolean isEmpty(){
            return arrayList.isEmpty();
        }
    
        public int getCapacity(){
            return arrayList.getCapacity();
        }
    
        /**
         * 入队
         * 时间复杂度:O(1)
         * @param e
         */
        @Override
        public void enqueue(E e){
            arrayList.addLast(e);
        }
    
        /**
         * 出队
         * 时间复杂度:O(n)
         * @return
         */
        @Override
        public E dequeue(){
            return arrayList.removeFirst();
        }
    
        /**
         * 查询队首元素
         * 时间复杂度: O(1)
         * @return
         */
        @Override
        public E getFront(){
            return arrayList.getFirst();
        }
    
        @Override
        public String toString(){
            StringBuilder res = new StringBuilder();
            res.append("Queue: ");
            res.append("front [");
            for(int i = 0; i < arrayList.getSize() ; i ++){
                res.append(arrayList.get(i));
                if(i != arrayList.getSize() - 1)
                    res.append(", ");
            }
            res.append("] tail");
            return res.toString();
        }
    
        public static void main(String[] args) {
    
            ArrayQueue<Integer> queue = new ArrayQueue<>();
            for(int i = 0 ; i < 10 ; i ++){
                queue.enqueue(i);
                System.out.println(queue);
                if(i % 3 == 2){
                    queue.dequeue();
                    System.out.println(queue);
                }
            }
        }
    }
    
  • 相关阅读:
    linux command lynx
    git bisect
    git blame (10)
    git crate&query&delete tag(九)
    git crate patch and check&apply patch(八)
    learning shell check host dependent pkg (8)
    【泛型】
    sql server 查询所有表的记录数
    【转】EXCEL中如何实现由总表自动得出分表
    MS Chart 打印
  • 原文地址:https://www.cnblogs.com/tc971121/p/13443631.html
Copyright © 2011-2022 走看看