数据结构学习笔记——数组

数组的特点

  • 数组中的元素在内存中顺序存储,在逻辑上是顺序表
  • 内存是由一个个内存单元组成,每一个内存单元都有自己的地址
  • 数组的初始化后,空间大小固定
  • 数组的下标从0开始

时间复杂度

  • 数组读取元素的方式为随机读取:array[3],与数组的输入规模无关,因此时间复杂度为O(1)
  • 数组的更新元素方式:array[3]=10,与数组的输入规模无关,时间复杂度O(1);
  • 数组的插入元素,最坏的可能插在数组的头部,整个数组的下标都要后移1,时间复杂度O(n)
  • 删除数组的元素,原理同插入元素,时间复杂度为O(n)

数组demo

package com.cc.array;

public class MyArray {
    private int [] array;
    //数组的实际长度
    private int size;

    public MyArray(int capacity) {
        array=new int[capacity];
        size=0;
    }

    /**
     * 数组插入元素
     * @param index
     * @param element
     * @throws Exception
     */
    public void insert(int index,int element) throws Exception{
        if (index<0||index>size)
            throw new IndexOutOfBoundsException("数组下标越界!");
        //数组的实际长度大于数组容器的长度,对数组进行扩容
        if (size>=array.length)
            resize();
        //从右向左至插入位置,每个元素向右移动一位
        for (int i=size-1;i>=index;i--){
            array[i+1]=array[i];
        }
        //插入位置的元素为当前插入的元素
        array[index]=element;
        //数组的实际长度加1
        size++;
    }

    /**
     * 实现数组的扩容
     */
    public void resize(){
        //新数组的容器的长度在原来数组容器的长度上*2,实现扩容
        int [] newArray =new int[array.length*2];
        //数组复制,原数组,原数组复制的起位置,目标数组,目标数组的起始位置,复制的长度
        System.arraycopy(array,0,newArray,0,array.length);
        //实现长度扩容
        array=newArray;
    }

    /**
     * 数组输出
     */
    public void out(){
        for (int i = 0; i <array.length; i++) {
            System.out.println(array[i]);
        }
    }

    /**
     * 删除指定位置的元素
     * @param index
     * @return
     */
    public int delete(int index){
        if (index<0||index>=size)
            throw new IndexOutOfBoundsException("数组下标越界!");
        int deleteElement =array[index];
        //将后一个元素赋值给钱面一个元素,防止数组越界,i<size-1,因此array[i+1]才不会越界
        for(int i=index;i<size-1;i++){
            array[i]=array[i+1];
        }
        //将最后一个元素改为初始值0
        array[size-1]=0;
        //数组的实际长度减一
        size--;
        return deleteElement;
    }

    public static void main(String[] args) throws Exception {
        MyArray myArray =new MyArray(4);
        myArray.insert(0,1);
        myArray.insert(1,2);
        myArray.insert(2,3);
        myArray.insert(3,4);
        myArray.insert(4,25);
//        myArray.out();
        myArray.delete(1);
        myArray.out();

    }
}

发布了35 篇原创文章 · 获赞 55 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/cchulu/article/details/105306589
今日推荐