JAVA的数据结构和算法(一)数组

动态数组的基本增删改查

实现代码

package com.struct;

/**
 * 封装的数组
 * 功能:增删改查
 */
public class MyArray {

    private long[] array;

    //表示有效的数据长度
    private int elements;

    public MyArray() {
        array = new long[50];
    }

    public MyArray(int maxsize) {
        array = new long[maxsize];
    }

    //添加数据
    public void insert(long value) {
        array[elements] = value;
        elements++;
    }

    //显示数据
    public void display() {
        System.out.print("[");
        for (int i = 0; i < elements; i++) {
            System.out.print(array[i] + " ");
        }
        System.out.println("]");
    }

    //查找数据根据值
    public int searchByValue(int value) {
        int i;
        for (i = 0; i < elements; i++) {
            if (value == array[i]) {
                break;
            }
        }
        if (i == elements) {
            return -1;
        } else {
            return i;
        }
    }

    //查找数据根据索引
    public long searchByIndex(int index) {
        if (index >= elements || index < 0) {
            throw new ArrayIndexOutOfBoundsException();
        } else {
            return array[index];
        }
    }

    //删除数据 根据index 将后面的值覆盖前面的值,然后将数组的长度减少1
    public void delete(int index) {
        if (index >= elements || index < 0) {
            throw new ArrayIndexOutOfBoundsException();
        } else {
            for (int i = index; i < elements; i++) {
                array[i] = array[i + 1];
            }
            elements--;
        }
    }

    //更新数据
    public void update(int index, int newValue) {
        if (index >= elements || index < 0) {
            throw new ArrayIndexOutOfBoundsException();
        } else {
            array[index] = newValue;
        }
    }

}

测试代码

package com.struct;

public class TestMyArray {
    public static void main(String[] args) {
        MyArray array = new MyArray();
        array.insert(10);
        array.insert(11);
        array.insert(12);
        array.insert(13);
        array.display();
        System.out.println(array.searchByIndex(3));
        System.out.println(array.searchByValue(13));
        array.update(0,88);
        array.display();
        array.delete(0);
        array.display();
    }
}

测试结果

[10 11 12 13 ]
13
3
[88 11 12 13 ]
[11 12 13 ]

有序数组

修改添加数据

思路:将数组里面的值一个个往后移动,从最后一个开始移动

将插入的值覆盖插入的位置即可

//添加数据 
public void insert(long value){
    int i;
    for (i = 0; i <elements ; i++) {
        if (value< array[i]){
            break;
        }
    }
    for (int j=elements;j > i;j--){
        array[j]= array[j-1];
    }
    array[i] = value;
    elements++;
}

线性查找

二分法查找

前提:数组时有序的

不断的从中间开始,故先while死循环,将pow值和low值累加相除2,然后赋值给middle

/*
二分查找算法
 */
public int binarySearch(long value) {
    int middle = 0;
    int low = 0;
    int pow = elements;
    while (true){
        int middle = (pow + low) / 2;
        if (array[middle] == value){
            return middle
        }else if (pow < low){
            return -1;
        }else {
            //小了就改大,大了就改小
            if (value < array[middle]){
                pow = middle -1;
            }else {
                low = middle +1;
            }
        }
    }
}

猜你喜欢

转载自blog.csdn.net/wwwzydcom/article/details/85174016
今日推荐