咦,为什么数组会放在链表后面呢?
因为原本不打算写数组的,感觉数组比较不那么灵活好用,链表多好呐。
但是仔细想想,数组也是数据结构的一种啊,况且没有数组怎么能衬托出链表的好呢?
而且后面的栈和队列还有数组实现和链表实现两种方式呢。

国际惯例

public class BasicArray{

    private int arr[];      // 数组变量
    private int elements;   // 标记存储元素数量
    private int max;        // 标记数组最大长度

    //  初始化数组
    public BasicArray(int max){
        this.max = max;
        this.arr = new int[max];
    }

    public static void main(String[] args){

    }
}

变量elements既表示了元素的数量,也是第一个空位所在位置(指针),elements-1就是最后一个元素所在位置。

插入元素

//  插入元素
public void insert(int num){
    // 数组满了(溢出)
    if(elements > max){
        System.out.println("放不下了啦!!");
        return;
    }
    arr[elements] = num;
    elements++; // 元素数+1
}

删除元素(最后一个)

//  删除元素
public void delete(){
    if(elements == 0){
        return;
    }
    // 元素数目-1,即指针左移一格
    elements--;
}

显示数组内容

//  显示内容
public void display(){
    // 从0开始循环到elements-1,即最后一个元素
    for(int i = 0; i < elements; i++){
        System.out.print(arr[i]+"  ");
    }
    System.out.println("\n");
}

元素的查找

//  查找元素
public Object find(int num){
    int i;
    for(i = 0; i < elements; i++){
        if(arr[i] == num){
            // 找到了,返回所在位置
            return i;
        }
    }
    System.out.println("并没有找到元素 "+num+"\n");
    return null;
}

//  根据索引显示数值
public Object get(int index){
    // 到了没有数据的地方或溢出 下同
    if(index >= elements || index < 0){
        System.out.println("该位置没有数据");
        return null;
    }
    return arr[index];
}

删除和替换

从数组中间删除一个元素的操作,就是不断地把后面的元素向前移位。
可以想象一条队伍,中间走了一个人,后面的人都往前走一步的过程。
而替换就是换了一个人进来。

//  删除指定索引的数据
public void remove(int index){
    if(index >= elements || index < 0){
        return;
    } 
    for(int i = index; i < elements; i++){
        arr[i] = arr[i+1];
    }
    elements--;
}

//  替换指定索引的数据
public void replace(int index, int num){
    if(index >= elements || index < 0){
        return;
    }
    arr[index] = num;

}

完成了 QAQ

测试一下吧~

public static void main(String[] args){
    BasicArray arr = new BasicArray(10);
    System.out.println("插入 2 3 7 11 13 17");
    arr.insert(2);
    arr.insert(3);
    arr.insert(7);
    arr.insert(11);
    arr.insert(13);
    arr.insert(17);
    arr.display();

    System.out.println("根据索引显示数值 第3个 第6个(从零开始计数)");
    if(arr.get(3)!=null) System.out.println(arr.get(3));
    if(arr.get(5)!=null) System.out.println(arr.get(6));
    System.out.println(" ");

    System.out.println("查找 3 和 5");
    if(arr.find(3)!=null)
    System.out.println("元素 "+arr.get((int)arr.find(3))+" 被找到,位于数组第 "+arr.find(3)+" 位");
    if(arr.find(5)!=null)
    System.out.println("元素 "+arr.get((int)arr.find(5))+" 被找到,位于数组第 "+arr.find(5)+" 位");
    System.out.println(" ");

    System.out.println("修改第0个元素为2333");
    arr.replace(0, 2333);
    arr.display();

    System.out.println("删除一个元素");
    arr.delete();
    arr.display();

    System.out.println("删除第0个元素");
    arr.remove(0);
    arr.display();

    System.out.println("删除第2个元素");
    arr.remove(2);
    arr.display();

    System.out.println("删除不存在的第100个元素");
    arr.remove(100);
    arr.display();

}

输出结果

插入 2 3 7 11 13 17 2 3 7 11 13 17

根据索引显示数值 第3个 第6个(从零开始计数) 11 该位置没有数据 null 查找 3 和 5 元素 3 被找到,位于数组第 1 位 并没有找到元素 5

修改第0个元素为2333 2333 3 7 11 13 17

删除一个元素 2333 3 7 11 13

删除第0个元素 3 7 11 13

删除第2个元素 3 7 13

删除不存在的第100个元素 3 7 13

以上 : )


完整代码

public class BasicArray {

    private int arr[];      // 数组变量
    private int elements;   // 标记存储元素数量
    private int max;        // 标记数组最大长度

    //  初始化数组
    public BasicArray(int max){
        this.max = max;
        this.arr = new int[max];
    }

    //  插入元素
    public void insert(int num){
        // 数组满了(溢出)
        if(elements > max){
            System.out.println("放不下了啦!!");
            return;
        }
        arr[elements] = num;
        elements++; // 元素数+1
    }

    //  删除元素
    public void delete(){
        if(elements == 0){
            return;
        }
        // 元素数目-1,即指针左移一格
        elements--;
    }

    //  显示内容
    public void display(){
        // 从0开始循环到elements-1,即最后一个元素
        for(int i = 0; i < elements; i++){
            System.out.print(arr[i]+"  ");
        }
        System.out.println("\n");
    }

    //  查找元素
    public Object find(int num){
        int i;
        for(i = 0; i < elements; i++){
            if(arr[i] == num){
                // 找到了,返回所在位置
                return i;
            }
        }
        System.out.println("并没有找到元素 "+num+"\n");
        return null;
    }

    //  根据索引显示数值
    public Object get(int index){
        // 到了没有数据的地方或溢出 下同
        if(index >= elements || index < 0){
            System.out.println("该位置没有数据");
            return null;
        }
        return arr[index];
    }

    //  删除指定索引的数据
    public void remove(int index){
        if(index >= elements || index < 0){
            return;
        } 
        for(int i = index; i < elements; i++){
            arr[i] = arr[i+1];
        }
        elements--;
    }

    //  替换指定索引的数据
    public void replace(int index, int num){
        if(index >= elements || index < 0){
            return;
        }
        arr[index] = num;

    }

    public static void main(String[] args){
        BasicArray arr = new BasicArray(10);
        System.out.println("插入 2 3 7 11 13 17");
        arr.insert(2);
        arr.insert(3);
        arr.insert(7);
        arr.insert(11);
        arr.insert(13);
        arr.insert(17);
        arr.display();

        System.out.println("根据索引显示数值 第3个 第6个(从零开始计数)");
        if(arr.get(3)!=null) System.out.println(arr.get(3));
        if(arr.get(5)!=null) System.out.println(arr.get(6));
        System.out.println(" ");

        System.out.println("查找 3 和 5");
        if(arr.find(3)!=null)
        System.out.println("元素 "+arr.get((int)arr.find(3))+" 被找到,位于数组第 "+arr.find(3)+" 位");
        if(arr.find(5)!=null)
        System.out.println("元素 "+arr.get((int)arr.find(5))+" 被找到,位于数组第 "+arr.find(5)+" 位");
        System.out.println(" ");

        System.out.println("修改第0个元素为2333");
        arr.replace(0, 2333);
        arr.display();

        System.out.println("删除一个元素");
        arr.delete();
        arr.display();

        System.out.println("删除第0个元素");
        arr.remove(0);
        arr.display();

        System.out.println("删除第2个元素");
        arr.remove(2);
        arr.display();

        System.out.println("删除不存在的第100个元素");
        arr.remove(100);
        arr.display();

    }
}

数据结构:数组

Dec.12 2017
CATT-L
与链表的非连续存储不痛,数组是连续存储的。
关于页面
返回