1.数组

点击使用幕布网页版查看(含思维导图)

数组(Array)是一种线性表结构。它用一组连续的内存空间,来存储一组具有相同类型的数据。

  • 最大的特点:支持随机访问,根据下标随机访问的时间复杂度为O(1)

  • 寻址:a[i]_add = base_add + i * data_type_size

  • 数组的插入和删除比较低效

    • 插入:如果我们要将数据插入到数组的第K个位置,为了把第K个位置空出来,我们需要将第K~N这部分的数据全部往后挪一位,这个操作的时间复杂度是O(n)
    • 删除:如果要删除第K个位置的数据,为了内存的连续性,也要将第K~N位置的数据往前挪一位,时间复杂度也是O(n)

当然,我们可以进行优化,那就是删除数据时并不立即删除,而是记录下已删除的数据。等到数组没有更多空间了,再执行一次真正的删除操作,一次性清理掉所有已删除数据。

数组Java实现


public class myArray {
    private int data[];//数据
    private int size;//数组大小
    private int count;//数组当前大小

    /**
     *
     * @param size
     */
    public myArray(int size){
        this.data = new int[size];
        this.size = size;
        this.count = 0;
    }

    /**
     * 删除指定index位置值
     * @param index
     * @return
     */
    public boolean delet(int index){
        //index不合法
        if(index < 0 || index > count) {
            System.out.println("位置不合法!");
            return false;
        }

        //[index+1,count)往前移动一位
        for(int i = index +1 ; i < count; i++){
            data[i-1] = data[i];
        }
        count--;
        return true;
    }

    /**
     * 将值插入所给下标处
     * @param index
     * @param value
     * @return
     */
    public boolean insert(int index, int value){
        //index不合法
        if(index < 0 || index > count) {
            System.out.println("位置不合法!");
            return false;
        }

        //内存空间已满
        if(size == count) {
            System.out.println("内存空间已满!");
            return false;
        }

        //[index,count)后移一位
        for(int i = count; i > index; i--)
            data[i] = data[i-1];

        data[index] = value;
        count ++;

        return true;
    }

    /**
     * 将值插入数组最后面
     * @param value
     * @return
     */
    public boolean append(int value){
        //内存空间已满
        if(size == count) {
            System.out.println("内存空间已满!");
            return false;
        }

        data[count++] = value;

        return true;
    }

    /**
     * 返回数组字符串
     * @return
     */
    public String toString(){
        StringBuilder builder = new StringBuilder();
        for(int i = 0; i < count; i++)
            builder.append(data[i] + ",");
        return builder.toString();
    }

    public void arrTest(){
        myArray test = new myArray(10);
        test.append(1);
        System.out.println(test.toString());
        test.insert(1,4);
        System.out.println(test.toString());
        test.delet(0);
        System.out.println(test.toString());
    }
}
posted @ 2020-07-03 16:12  codespoon  阅读(90)  评论(0编辑  收藏  举报