데이터 구조 - 동적 배열 CRUD

콘텐츠

선형 테이블

2. 동적 배열

3. 요소 추가

1. 기본적으로 배열의 끝에 추가

2. 지정된 위치에 인덱스 추가

4. 삭제

1. 첫 번째 요소 삭제

2. 버튼을 눌러 삭제

3. 값으로 삭제

5. 수정

6. 문의


선형 테이블

2. 동적 배열

3. 요소 추가

1. 기본적으로 배열의 끝에 추가

동적 배열 클래스:

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입니다. 추가된 요소가 배열의 길이보다 클 경우 배열의 길이는 자신의 2배로 확장됩니다.

2. 지정된 위치에 인덱스 추가

 

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();
        }
    }

4. 삭제

1. 첫 번째 요소 삭제

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

 

2. 버튼을 눌러 삭제

   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;
    }

3. 값으로 삭제

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;
    }

5. 수정

    
    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;
    }

6. 문의

  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;
    }

추천

출처blog.csdn.net/qq_52655865/article/details/124245481