数据结构—动态数组增删改查

目录

一线性表

二.动态数组

三.添加元素

一.默认添加在数组末尾

二.在指定位置index添加

四.删除

一.删除首位元素

二.按下标删除

三.按值删除

五.修改

六.查询


一线性表

数据结构—动态数组增删改查_第1张图片

二.动态数组

数据结构—动态数组增删改查_第2张图片

三.添加元素

一.默认添加在数组末尾

动态数组类:

package seqlist;

import java.util.Arrays;

/**
动态数组的类:具备增删改查的功能,逻辑结构对外不可见。用户只知道该功能
 */
public class MyArray {
    //封装的数组
    private int[] data;
    //表示动态数组中元素的个数;
    private int size;

    //如果没有传参,默认开辟大小为是10的数组
    public MyArray(){
        this(10);
    }

    public MyArray(int initCap){
        this.data = new int[initCap];
    }

    public void add(int val){
        data[size] = val;
        size++;
        //元素在添加过程中,元素已经填满数组
        if (size == data.length){
            grow();
        }
    }

    /**
     *
     */
    private void grow(){
        this.data = Arrays.copyOf(data,size*2);
    }

    @Override
    public String toString() {
        return "MyArray{" +
                "data=" + Arrays.toString(data) +
                '}';
    }
}

测试类:

public class Test {
    public static void main(String[] args) {
        MyArray myArray = new MyArray(3);
        myArray.add(10);
        myArray.add(20);
        myArray.add(30);
        myArray.add(40);
        System.out.println(myArray.toString());
    }
}

测试结果:数组定义初始化的长度为3,当添加的元素大于数组长度时,数组长度扩容到自身的已倍

数据结构—动态数组增删改查_第3张图片

二.在指定位置index添加

数据结构—动态数组增删改查_第4张图片

 

public void add(int val,int index){
        //先判断index是否非法,index可以等于size,就相当于在数组的尾部插入,index = 0在头部插入
        if (index < 0 || index > size){
            System.err.println("index is ");
        }
        for (int i = size -1;i >= index ;i--){
            data[i+1] = data[i];
        }
        data[index] = val;
        size++;
        //元素在添加过程中,元素已经填满数组
        if (size == data.length){
            grow();
        }
    }

四.删除

数据结构—动态数组增删改查_第5张图片

一.删除首位元素

public int daleteFrist(){
        return delete(0);
    }
    public int deleteLast(){
        return delete(size - 1);
    }

 

二.按下标删除

   public int delete(int index){
        if (index < 0 || index > size){
            System.err.println("下标违法");
            return -1;
        }
        int temp = data[index];
        for (int i = index; i < size - 1; i++) {
            data[i] = data[i+1];
        }
        size-- ;
        return temp;
    }

三.按值删除

public int deleteVal(int val){
        int i = searchByVal(val);
        if (i != -1){
            int delete = delete(i);
            return delete;
        }
        return -1;
    }
    public int[] deleteAllVal(int val){
        MyArray myArray1 = new MyArray(1);
        for (int i = 0; i < size; i++) {
            if (data[i] == val){
                myArray1.add(data[i]);
                delete(i);
            }
        }
        return myArray1.data;
    }

五.修改

    
    public int updateByIndex(int index,int val){
        if (index < 0 || index > size){
            System.err.println("下标违法");
            return -1;
        }
        int oldVal = data[index];
        data[index] = val;
        return oldVal;
    }
    public boolean updateByVal(int oldVal,int val){
        int i = searchByVal(oldVal);
        if (i != -1){
            data[i] = val;
            return true;
        }
        return false;
    }

六.查询

  public int searchByIndex(int index){
        if (index < 0 || index > data.length - 1){
            System.err.println("下标违法");
            return -1;
        }
        return data[index];
    }
    public int searchByVal(int val){
        for (int i = 0; i < size-1; i++) {
            if (data[i] == val){
                return i;
            }
        }
        return -1;
    }
    public boolean hasContainVal(int val){
        int i = searchByVal(val);
        if (i != -1){
            return true;
        }
        return false;
    }

你可能感兴趣的:(数据结构,线性表,动态数组,数据结构)