java数据结构与算法的day04

        今天我们主要解决的是数据删除的问题,同样的我们需要考虑到以下几个问题:

        (1) 根据什么原则进行删除

        这里有两种思路,根据索引或者索引范围进行删除,根据元素或者元素群内容进行删除,

        (2) 删除后,数组的元素排列

        在实际生活中,删除后的新队列,需要对前面的数据进行填充

        (3) 满足什么条件进行删除

        对于元素来讲,需要存在才可以进行删除;对于索引来说,不能超出索引范围

        理清楚这几个问题,那么接下来就是我的代码展示(为了方便,我这里采用了包装类),将之前的代码进行了小部分的修改:

        第一部分,修改的代码(这里对需要运用的代码进行了修改)

    //这个是用来遍历数组
    public static void printlist(Integer arr[]){
        if(arr!=null){
            int length = arr.length;
            int i;
            for(i=0 ; i<length ;i++){
                System.out.print(arr[i]+" ");
            }
        }else {
            System.out.println("null");
        }

    }
    //这个是用来索引元素的
    public static  Integer printElemnt( Integer arr[],int i){
        if (i<= arr.length) {
            return arr[i];
        }else {
            return null;
        }
    }

    //判断该元素是否存在
    public static boolean boolElement(Integer arr[] , int i){
        boolean t = false;
        for(int j=0 ; j<arr.length ; j++){
            if(i==printElemnt(arr,j)){
                t = true;
                break;
            }
        }
        return t;
    }
    public static boolean boolElements(Integer arr[] , Integer a[]){
        boolean t = false;
        int arrl = arr.length;
        int al = a.length;
        for(int j=0 ; j<arrl-al ; j++){
            int i;
            int x=j;
            for(i=0;i<al;i++){
                if(a[i]==arr[x++]){
                    if(i==(al-1)){
                        t = true;
                    }
                }else {
                    break;
                }
            }
        }
        return t;
    }

        第二部分,删除元素群

    //删除元素(根据元素索引进行删除)
    public static Integer[] delete_Elements_local(Integer arr[] , int start , int end){
        int length = end-start;
        if(length<arr.length&&start<end){
            for(int i = start-1 ; i<=end-start;i++){
                arr[i] = null;
            }
            return arr;

        }else {
            System.out.println("索引超出范围或者索引大小不正确");
            return arr;
        }
    }
    //删除元素(根据元素内容进行删除)
    public static Integer[] delete_Elements_context(Integer arr[] , Integer context[]){
        int len1 = arr.length;
        int len2 = context.length;
        if(boolElements(arr,context)){
            for(int i=0; i<len1-len2;i++){
                int s = i;
                int times = 0;
                for(int j=0;j<len2;j++){
                    if(arr[s++]==context[j]){
                        times++;
                    }
                }
                s = i;
                if(times==len2){
                    for(int j=0;j<len2;j++){
                        arr[s++]=null;
                    }
                }
            }
            Integer newarr[] = new Integer[arr.length];
            for(int j = 0 ,i=0; j< arr.length;j++ ){
                if(arr[j]!=null){
                    newarr[i++]=arr[j];
                }
            }
            return newarr;
        }else {
            System.out.println("元素群不在原数组里面");
        }

        return null;
    }

        第三部分,删除元素

    //删除元素(根据元素索引进行删除)
    public static Integer[] delete_Element_local(Integer arr[] , int index){
        if(index<= arr.length){
            arr[index-1] = null;
            for(; index<= arr.length-1;index++){
                arr[index-1] = arr[index];
            }
            arr[index-1] = null;
            return arr;
        }else {
            System.out.println("超出索引范围");
            return arr;
        }


    }
    //删除元素(根据元素内容进行删除)
    public static Integer[] delete_Element_context(Integer arr[] , int context){
        if(boolElement(arr,context)){
            int index=-1;
            Integer other[] = new Integer[arr.length];
            for(int i =0 ; i<arr.length ; i++){
                if(arr[i]==Integer.valueOf(context)){
                    arr[i] = null;
                    if(index==-1){
                        index=i;
                    }
                }
            }
            for(int t = index , j=0 ; t< arr.length;t++){
                if(arr[t]==null){
                    continue;
                }else {
                    other[j++]=arr[t];
                    arr[t]=null;
                }
            }
            for(int t=index,j=0 ; t< arr.length;t++,j++){
                arr[t] = other[j];
            }
            return arr;
        }else {
            System.out.println("该元素不存在");
            return arr;
        }
    }

        第四部分,测试代码

public static void main(String[] args) {
        System.out.println("\n===================接下来是删除元素群的方法验证=================");

        Integer arr[] = new Integer[10];
        for(int i=1;i< arr.length-3;i++){
            arr[i-1] = i;
        }
        System.out.println("原数组的内容:");
        printlist(arr);
        int start = 2;
        int end = 5 ;
        arr = delete_Elements_local(arr,start,end);
        System.out.println("\n根据索引范围,将第二个到第四个元素去除,新数组的内容是:");
        printlist(arr);

        Integer arr2[] = new Integer[10];
        arr2[0] = 1;
        arr2[1] = 2;
        arr2[2] = 1;
        arr2[3] = 2;
        arr2[4] = 2;
        Integer replace[] = new Integer[2];
        replace[0] = 1;
        replace[1] = 2;
        System.out.println("\n原数组的内容为:");
        printlist(arr2);
        System.out.println("\n根据元素群的内容进行删除,将元素群为{1,2}的进行删除,新数组的内容为:");
        arr2 = delete_Elements_context(arr2,replace);
        printlist(arr2);

          /**
         Integer arr[] = new Integer[10];
         for(int i=1;i< arr.length-3;i++){
         arr[i-1] = i;
         }

         System.out.println("===================接下来是删除元素的方法验证=================");
         System.out.println("原数组的内容:");
         printlist(arr);
         System.out.println("\n根据索引进行删除元素,删除第4个数,新数组的内容:");
         arr = delete_Element_local(arr, 4);
         printlist(arr);
         System.out.println("\n原数组的内容:");
         arr[3]=1;
         printlist(arr);
         System.out.println("\n根据索引的内容进行删除元素,删除元素内容为1的元素,新数组的内容:");
         arr = delete_Element_context(arr,1);
         printlist(arr);
         */
       
    }
}

        这四天时间,我们通过数组大致完成了增删改查的部分,在这里有还有很多很多的功能没有考虑到的、没有实现。在今后的日子里,会慢慢的实现它们.另外,全部代码也已经上传到我的资源了,大家可以去查看的哦!也谢谢大家的支持,会不断进步的

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值