《大话数据结构》Java实现 顺序存储的插入与删除

前言

《大话数据结构》这本书使用的是C语言编写,为了练习书上举的例子,使用Java按照作者的思想进行模拟出来。
也许我这里不是最好的方法,但如果您看完之后,我写的有任何不正确或者可以优化的地方,还请在留言区指出,我一定会认真研究!

1. 顺序存储的插入与删除

以下为实现的代码

package com.hry.datastructure;

/**
 * @Author 侯瑞阳
 * @Date 2019/11/14 14:01
 * @Desc
 **/
public class MyArray {

    /**
     * 用于获取下标的值 (对应书本 P50)
     *
     * @param index 获取指定的下标对应的值
     * @param array 传递的数组
     * @return 下标对应的数据
     */
    public Object getByIndex(int index, Object[] array) {
        // 直接返回下标的值
        return array[index];
    }

    /**
     * 在指定位置添加元素 (对应书本 P51)
     *
     * @param index 下标
     * @param item  要存储的值
     * @param array 被获取的数组
     * @return 添加之后的新数组
     */
    public Object[] add(int index, Object item, Object[] array) {
        // 判断该下标位置上的值是否为空,如果为空则直接赋值即可,不为空在进行数据的添加
        if (isEmpty(index, array)) {
            array[index] = item;
        }
        // 创建一个新的数组
        Object[] newArray = new Object[array.length + 1];
        // 把对应下标之前的值赋值给新数组
        for (int i = 0; i < index; i++) {
            newArray[i] = array[i];
        }
        // 把要添加的值放在指定位置上
        newArray[index] = item;
        // 把对应下标之后的元素赋值给新元素
        for (int j = index + 1; j < newArray.length; j++) {
            newArray[j] = array[j - 1];
        }
        return newArray;
    }

    /**
     * 判断指定下标上的值是否为空
     *
     * @param index 下标
     * @param array 被获取的数组
     * @return true-不为空 | false-为空
     */
    public boolean isEmpty(int index, Object[] array) {
        return array[index] == null;
    }

    /**
     * 删除指定下标元素的值 (对应书本 P52)
     *
     * @param index 下标
     * @param array 被获取的数组
     * @return 删除之后的新数组
     */
    public Object[] deleteByIndex(int index, Object[] array) {
        // 首选判断当前位置的元素是否为空
        if (isEmpty(index, array)) {
            throw new RuntimeException("数据为空!不能够进行删除");
        }
        // 这里用来将下标之后的集合往前移动一位
        int nextValue = index + 1;
        array[index] = null;
        for (int i = index; i < array.length - 1; i++) {
            // 后面的值往前移动
            array[i] = array[nextValue++];
        }
        // 数组长度减 1
        // 创建一个新的数组
        Object[] newArray = new Object[array.length - 1];
        for (int i = 0; i < array.length - 1; i++) {
            // 把旧数组赋给新数组
            newArray[i] = array[i];
        }
        return newArray;

    }

    public static void main(String[] args) {
        String[] array = {"1", "2", "3", "4", "5", "6", "7", "8", "9", "10"};
        MyArray myArray = new MyArray();
        System.out.println("获取下标3的数据是:" + myArray.getByIndex(3, array));
        System.out.println("===================添加一个数据========================");
        Object[] add = myArray.add(3, 10, array);
        for (int i = 0; i < add.length; i++) {
            System.out.println("添加之后下标[" + i + "]对应的值为:" + add[i]);
        }
        System.out.println("===================删除一个数据========================");
        Object[] objects = myArray.deleteByIndex(5, array);
        for (int i = 0; i < objects.length; i++) {
            System.out.println("删除之后下标[" + i + "]对应的值为:" + objects[i]);
        }

    }

}

你可能感兴趣的:(大话数据结构---Java版)