玩转数据结构之创造自己的数组

刘宇波老师的玩转数据结构讲的非常不错,记个笔记。

学数据结构可以不用局限于语言,虽然课上使用的Java,但是同样可以使用其他任何语言来编写,这里记录Java的代码,后续会用Python重写上传github。

1. 定义一个Array数组类,并添加构造函数定义这个类的基本属性

public class Array {
    //定义成员变量 
    private int[] data;
    private int size;

    //使用构造函数定义类的属性 当创建对象时就会自动构建一个Array
    public Array(int capacity){
        data = new int[capacity];  // 指定了创建数组的大小
        size = 0;
    }

    //使用无参数构造函数给出默认值
    public Array(){
        this(10);  // this指向有参数的构造函数
    }
}

2. 常用方法

    //获取数组的元素个数
    public int getSize() {
        return size;
    }

    //获取数组的容量
    public int getCapacity(){
        return data.length;  // 这里返回不了capacity
    }

    //判断数组是否为空
    public boolean isEmpty(){
        return size == 0;
    }

    //获取索引位置元素
    public int get(int index){
        if (index <0 || index > size)  
            throw new IllegalArgumentException("Get failed.Index is Illegal");
        return data[index];
    }

3. 数据结构基本操作之“增”

add方法逻辑是先把原本的数据向后移,空出指定的index位置,最后把需要添加的数放进数组。

    //在指定位置添加元素e
    public void add(int index, int e){
        if (index <0 || index > size)  //if一定要加括号
            throw new IllegalArgumentException("Get failed.Index is Illegal");
        if (size == data.length)
            throw new IllegalArgumentException("Add is failed.data is full");

        for(int i = size - 1; i >= index; i --){  //判断条件不能错
            data[i+1] = data[i];
        data[index] = e;
        size ++;
        }
    }

    //数组末尾添加元素
    public void addLast(int e){
        add(size, e);  
    }

    //数组首端添加元素
    public void addFirst(int e){
        add(0, e);
    }

4. 数据结构基本操作之“删”

remove方法逻辑和add类似,index后的元素向前移动,把index位置元素挤掉。

    //删除指定位置元素并返回其值
    public int remove(int index){
        if (index <0 || index > size)  //if一定要加括号
            throw new IllegalArgumentException("Get failed.Index is Illegal");
        int ret =data[index];
        for(int i = index + 1; i < size; i ++)
            data[i - 1] = data[i];
        size --;
        return ret;
    }

    public void removeFirst(){
        remove(0);
    }
    public void removeLast(){
        remove(size-1);
    }

    //删除元素e
    public void removeElement(int e){
        int index = findIndex(e);
        if(index != 1)
            remove(index);
    }

5. 数据结构基本操作之“改”

    //修改指定位置元素为e
    public void adjust(int index, int e){
        if (index <0 || index > size)  //if一定要加括号
            throw new IllegalArgumentException("Get failed.Index is Illegal");
        data[index] = e;
    }

6. 数据结构基本操作之“查”

    //查找是否存在元素e
    public boolean find(int e){
        for(int i = 0;i < size; i ++)
            if (data[i] == e)
                return true;
        return false;
    }

    //查找元素e的索引
    public int findIndex(int e){
        for(int i = 0;i < size; i ++)
            if (data[i] == e)
                return i;
        return -1;  // 不存在返回-1
    }

    //删除指定位置元素并返回其值
    public int remove(int index){
        if (index <0 || index > size)  //if一定要加括号
            throw new IllegalArgumentException("Get failed.Index is Illegal");
        int ret =data[index];
        for(int i = index + 1; i < size; i ++)
            data[i - 1] = data[i];
        size --;
        return ret;
    }
发布了37 篇原创文章 · 获赞 92 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/hesongzefairy/article/details/104410343