数组结构之数组的增删改查

数据结构——数组

时间复杂度

数组增加删除修改查询
时间复杂度O(n)O(n)O(1)O(1)

修改: 数组名[index] = 修改的值或者元素 //再次输出可以看到已经被修改

查询:数组名[index] //可以直接获取相应下标的值

增加和删除方法

通过以往的学习写出增加、删除和修改方法

public class MyArray {
    private int[] array;
    private int size;//元素长度
    //初始化
    public MyArray(int n){
        array = new int[n];
        size = 0;
    }
     /**
     * 判断是否是空
     * @return 布尔值
     */
    public boolean isEmpty(){
        if(size>0)
            return false;
        return true;
    }
    /**
     * 数组插入元素
     * @param index   索引/下标
     * @param element 值/元素
     */
    //尾部插入 中间插入 头部插入(本质上就是中间插入,元素都是要往后移) 三种情况
    //传入参数 插入的位置 和 元素
    public void insert(int index,int element){
        //判断索引位置是否合法
        // 第一次插入只能是0 插入完成之后size++ 第二次插入可以是0可以是1 但是不能超过元素 要保证元素之间没有空隙
        if(index<0||index>size) {
            System.out.println("超出数组实际元素范围");
            return;
        }
        //如果长度大于数组长度即容量上限,则对数组进行扩容
        if(size>=array.length){
            reSize();
        }
        //给索引赋值 不覆盖元素 用for循环将其他元素后移 没满的情况下
        for(int i = size-1;i>=index;i--) {
            array[i+1] = array[i];
        }
        array[index]=element;
        size++;//长度加1
    }
    /**
    * 扩容问题,可以不断插入元素
    */
    public void reSize(){
        //将数组复制到新数组
        int[] temp = new int[array.length*2];
        //方法1:利用循环赋值
        for (int i = 0; i < array.length; i++) {
            temp[i]=array[i];
        }
        //方法2:传递的参数(原数组,源索引位置,新数组,目标索引位置,复制的长度)
        //System.arraycopy(array,0,temp,0,array.length);
        array = temp;
    }
    /**
     * @param index 要删除的索引
     * @return 返回被删除的值/元素
     */
    public int del(int index){
        //判断删除的下标是否超出数组范围
        if(0>index||index>=size){
            System.out.println("要删除的索引有误");
            return -1;
        }
        //做删除操作其实是把处在的元素替换 并将数组大小减1
        int value = array[index];
        //元素向前移动一位
        for(int i = index;i<size;i++){
            array[i]=array[i+1];
        }
        size--;
        return value;
    }
    /**
     * 改
     */
    public void update(int index,int elem){
        //判断修改的下标是否超出数组范围
        if(0>index||index>=size){
            System.out.println("要修改的索引有误");
            return;
        }
        array[index]=elem;
    }
    
    /*
     * 输出数组 查全部元素
     */
    public void print(){
        for (int i = 0; i < size; i++) {
            System.out.print(array[i]+" ");
        }
    }
}

测试代码:

public class MyArrayDemo {
    public static void main(String[] args) {
        // 初始长度
        MyArray ma = new MyArray(5);
        ma.print();
        boolean empty = ma.isEmpty();
        System.out.println(empty);
        // 插入元素
        ma.insert(0,2);
        ma.insert(0,3);
        ma.insert(1,4);
        ma.insert(1,5);
        ma.insert(4,5);
        ma.print();
        //扩容增加
        ma.insert(5,7);
        System.out.println();//换行
        ma.print();

        System.out.println();
        //删除元素
        System.out.println("删除的元素为:"+ma.del(0));
        ma.print();

        System.out.println("删除的元素为:"+ma.del(5));
        ma.update(1,6);
        ma.print();
        boolean empty1 = ma.isEmpty();
        System.out.println("是否为空:"+empty1);
    }
}
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值