zoukankan      html  css  js  c++  java
  • java代码实现自定义栈 + 时间复杂度分析

    如果是还不知道栈是啥玩意的同学们请查看我在CSDN写的一篇关于栈的博客:

    https://blog.csdn.net/qq_43059674/article/details/86567733

    自定义栈java实现代码:

    接口定义:

    /**
     * 定义栈接口
     * 
     * @author 20190313
     *
     */
    public interface Stack<T> {
    
        /**
         * 当前栈是否为空
         * @return
         */
        public boolean isEmpty();
        
        
        /**
         * 返回当前栈顶元素,但不出栈
         * @return
         */
        public T peek() ;
        
        
        /**
         * 当前栈顶元素出栈
         * @return
         */
        public T pop();
        
        
        /**
         * 元素入栈
         * @param element
         */
        public void push(T element);
    
        /**
         * 返回当前栈中的元素个数
         * @return
         */
        public int size();
        
        
        /**
         * 清空当前栈
         */
        public void clear();
        
        
        
    }

    实现类,底层使用的是数组实现

    /**
     * 实现了定义栈的接口 Stack 该实现类基于数组 属于顺序栈
     * @author 20190313
     *
     */
    public class ArrayStack<T> implements Stack<T> {
        private final int DEFAULT_SIZE = 3;
        private int size = 0;
        private int capactiy = 0;
    
        // top指向下一个能添加元素的位置
        private int top = 0;
        private Object[] array;
    
        public ArrayStack() {
            // TODO Auto-generated constructor stub
            this.capactiy = this.DEFAULT_SIZE;
            this.array = new Object[this.capactiy];
        }
    
        public ArrayStack(int capactiy) {
            // TODO Auto-generated method stub
            this.capactiy = capactiy;
            this.array = new Object[capactiy];
        }
    
        @Override
        public boolean isEmpty() {
            // TODO Auto-generated method stub
            return size == 0;
        }
    
        @Override
        public T peek() {
            // TODO Auto-generated method stub
            return (T) this.array[this.top - 1];
        }
    
        @Override
        public T pop() {
            // TODO Auto-generated method stub
            T element = (T) this.array[top - 1];
            this.array[top--] = null;
            this.size--;
            return element;
        }
    
        @Override
        public void push(T element) {
            // TODO Auto-generated method stub
            if (this.size < this.capactiy) {
                this.array[top] = element;
                this.top++;
                this.size++;
            } else {
                enlarge();
                push(element);
            }
        }
    
        /**
         * 扩容的方法
         */
        private void enlarge() {
            this.capactiy = this.capactiy + this.DEFAULT_SIZE;
            Object[] newArray = new Object[this.capactiy];
            System.arraycopy(array, 0, newArray, 0, array.length);
            // 把旧的array用null填充
            Arrays.fill(array, null);
            this.array = newArray;
    
        }
    
        @Override
        public int size() {
            // TODO Auto-generated method stub
            return size;
        }
    
        @Override
        public void clear() {
            // TODO Auto-generated method stub
            Arrays.fill(array, null);
            this.top = 0;
            this.size = 0;
            this.capactiy = this.DEFAULT_SIZE;
            this.array = new Object[this.capactiy];
        }
    }

    下面是栈方法的时间复杂度分析

    哈,时间复杂度比较简单 除入栈外时间复杂度都为 O(1),下面我们看看入栈的时间复杂度,如果空间足够时间复杂度为O(1),但如果当前容量不足发生扩容那么时间复杂度就为O(n),

    也就是说,对于入栈操作来说,最好情况时间复杂度是 O(1),入栈的平均复杂度通关均摊法可以得出为O(1)

  • 相关阅读:
    ILM --interface logic model
    dbGet net trace instant pin
    LIST 列表
    Getopt::Long
    TCL Strings
    MBA 报考
    英语 口译考试
    微服务了解
    解析微服务架构(三):微服务重构应用及IBM解决方案
    解析微服务架构(二):融入微服务的企业集成架构
  • 原文地址:https://www.cnblogs.com/IT-CPC/p/10885941.html
Copyright © 2011-2022 走看看