天天看点

线性表(1)——顺序表(动态数组)

目录

1. 先建立动态数组实体类DynamicArray类;

2. 再建立方法类DynamicArrayDao类;

3. 测试类DynamicArrayMain类;

1. 先建立动态数组实体类DynamicArray类;

DynamicArray:

包括顺序表的数据域和顺序表的长度;还有一个动态数组的最大容量,我们设置为常量;

 DynamicArray:

package com.java.model;

public class DynamicArray {

    //动态数组最大容量
    public final static int capacity=100;

    //顺序表的结点数据
    public int[] data;
    //顺序表的长度,用来标识数组中的元素个数
    public int size;

    //构造函数
    public DynamicArray(int[] data, int size) {
        this.data = data;
        this.size = size;
    }
}
           

2. 再建立方法类DynamicArrayDao类;

这里面包含了一些对顺序表操作的方法;

如:初始化数组,插入指定值,根据位置删除,查看元素返回对应的下标,打印数组等;

package com.java.dao;

import com.java.model.DynamicArray;

import static com.java.model.DynamicArray.capacity;

public class DynamicArrayDao {

    //初始化数组
    public DynamicArray Init_Array(){
        //数组数据域初始化
        int[] data1=new int[capacity];

        //DynamicArray初始化
        DynamicArray myArray=new DynamicArray(data1,0);

        //数组赋值
        for(int i=0;i<capacity;i++){
            myArray.data[i]=0;
        }
        return myArray;
    }

    //插入指定值
    public void PushBack_Array(DynamicArray array,int value){
        if(array==null){
            return;
        }
        //如果线性表容量小于或等于数组容量
        if(array.size==capacity){
            return;
        }
        //插入元素
        array.data[array.size]=value;
        array.size++;
    }

    //根据位置删除
    public void RemoveByPos_Array(DynamicArray array,int pos){
        if (array == null){
            return;
        }
        //判断位置是否有效
        if(pos < 0 || pos >= array.size){
            return;
        }
        //删除元素
        for (int i = pos; i < array.size -1; i ++){
            array.data[i] = array.data[i + 1];
        }
        array.size--;
    }

    //查找元素,返回该值第一次出现时对应的下标位置
    public int Find_Array(DynamicArray array,int value){
        if(array==null){
            return -1;
        }
        //找到该值第一次出现的位置,-1表示没有找到;
        int pos=-1;
        for(int i=0;i<array.size;i++){
            if(array.data[i]==value){
                pos=i;
                break;
            }
        }
        return pos;
    }

    //根据位置查找到某个元素
    public int At_Array(DynamicArray array,int pos){
        if(array==null){
            return -1;
        }
        return array.data[pos];
    }

    //根据值删除
    public void RemoveByValue_Array(DynamicArray array,int value){
        if(array==null){
            return;
        }
        //首先找到该值对应的数组下标
        int pos=Find_Array(array,value);
        //调用根据位置删除的方法
        RemoveByPos_Array(array,pos);
    }

    //打印
    public void Print_Array(DynamicArray array){
        if(array==null){
            return;
        }
        for(int i=0;i<array.size;i++){
            System.out.print(array.data[i]+",");
        }
    }

    //清空数组
    public void Clear_Array(DynamicArray array){
        if(array==null){
            return;
        }
        for(int i=0;i<array.size;i++){
            array.data[i]=0;
        }
        array.size=0;
    }

    //获得动态数组当前元素个数
    public int Size_Array(DynamicArray array){
        if(array==null){
            return -1;
        }
        return array.size;
    }
}
           

 3. 测试类DynamicArrayMain类;

这里主要包含主函数,进行测试的类;
package com.java.main;

import com.java.dao.DynamicArrayDao;
import com.java.model.DynamicArray;
import static com.java.model.DynamicArray.capacity;

public class DynamicArrayMain {
    public static void main(String[] args) {
        DynamicArrayDao dynamicArrayDao=new DynamicArrayDao();
        //初始化动态数组
        DynamicArray myArray=dynamicArrayDao.Init_Array();
        System.out.println("初始化动态数组:");
        //获取容量
        System.out.println("数组容量:"+capacity);
        System.out.println("数组实际大小:"+dynamicArrayDao.Size_Array(myArray));
        //插入元素
        for(int i=0;i<10;i++){
            dynamicArrayDao.PushBack_Array(myArray,i);
        }
        System.out.println();

        System.out.println("插入元素之后:");
        //获取容量
        System.out.println("数组容量:"+capacity);
        System.out.println("数组实际大小:"+dynamicArrayDao.Size_Array(myArray));
        System.out.println();

        //打印插入元素
        System.out.println("打印插入的元素:");
        dynamicArrayDao.Print_Array(myArray);
        System.out.println();

        //根据元素位置删除元素
        dynamicArrayDao.RemoveByPos_Array(myArray,2);
        //根据元素值删除元素
        dynamicArrayDao.RemoveByValue_Array(myArray,7);
        System.out.println();

        //打印删除后的数组
        System.out.println("打印删除后的元素:");
        dynamicArrayDao.Print_Array(myArray);
        System.out.println();

        //查找元素为5的位置
        System.out.println();
        System.out.print("元素5的位置为: ");
        int pos=dynamicArrayDao.Find_Array(myArray,5);
        System.out.println(pos);

        //查找位置为7的元素值
        System.out.println();
        System.out.print("位置为7的元素为: ");
        int value=dynamicArrayDao.At_Array(myArray,7);
        System.out.println(value);

        //获取容量
        System.out.println();
        System.out.println("此时的数组容量:"+capacity);
        System.out.println("此时的数组实际大小:"+dynamicArrayDao.Size_Array(myArray));
        System.out.println();
    }
}
           

测试结果:

线性表(1)——顺序表(动态数组)

项目源码地址:

https://gitee.com/Huke-123/DataConstruct

继续阅读