データ構造研究ノート - アレイ

これは、配列の特徴

  • 配列内の要素を順次メモリに格納され、論理的な順次テーブル
  • メモリは、メモリユニットの一つであり、各メモリセルは、独自のアドレスを持っています
  • アレイの初期化後、固定された空間
  • 配列インデックスが0から始まります

時間複雑

  • かかわらず、入力配列のサイズの配列[3]、したがって、時間複雑度はO(1)である:配列要素は、ランダムアクセス方法を読み取ります
  • 配列要素の様子を更新:配列[3]は関係なく、入力アレイ、O(1)の時間計算量の大きさの、= 10。
  • 挿入された配列要素は、最悪のヘッドアレイに挿入され、シフト後のアレイ全体の必須インデックス、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 ビュー20000 +

おすすめ

転載: blog.csdn.net/cchulu/article/details/105306589