顺序表

顺序表的原理:我们操作顺序表时,无非就是对顺序表的长度进行操作,例如我们删除顺序表一个元素时,要将顺序表长度 - 1,然而数组的真实长度并没有改变。又例如当我们打印顺序表时,必须是以顺序表的长度size操作,而不是以数组本身长度data.length操作,我们要牢记要拿着顺序表的长度size操作一切。

我们在MyArrayList类中存放顺序表的内容

public class MyArrayList {
    public int[] data;     //用数组存放数据
    public int size;       //顺序表长度

    //size默认为0
    public MyArrayList() {
        //初始化分配5个能存放int类型数据的数组
        this.data = new int[5];
    }
}

再在该类中实现顺序表的相应方法

添加元素

    //添加数据
    public void add(int pos, int value) {
        //若数组空间不够,即扩大两倍
        if (this.size == this.data.length) {
            this.data = Arrays.copyOf(this.data, this.data.length * 2);
        }
        if (pos < 0 || pos > this.size) {
            System.out.println("位置不合法!");
            return;
        }
        //元素后置
        for (int i = this.size; i > pos; i--) {
            this.data[i] = this.data[i - 1];
        }
        //pos位置赋值
        this.data[pos] = value;
        this.size++;
    }

查找元素

    //判断是否包含某个元素
    public boolean contains(int value) {
        for (int i = 0; i < this.size; i++) {
            if (this.data[i] == value) {
                return true;
            }
        }
        return false;
    }

查找元素对应的位置

    public int search(int value) {
        for (int i = 0; i < this.size; i++) {
            if (value == this.data[i]) {
                return i;
            }
        }
        System.out.println("不存在该值!");
        return -1;
    }

获取指定位置的元素

//获取pos位置的元素
    public int setPos(int pos) {
        if (pos < 0 || pos >= this.size) {
            System.out.println("pos位置不合法!");
            return -1;
        }
        return this.data[pos];
    }

将指定位置的元素设置成指定的值

 //将pos位置的值设置成value
    public void setPso(int pos, int value) {
        if (pos < 0 || pos >= this.size) {
            System.out.println("pos位置不合法!");
            return;
        }
        this.data[pos] = value;
    }

删除顺序表中第一次出现的指定关键字

    //删除顺序表第一次出现的关键字key
    public void remove(int key) {
        int pos = -1;
        for (int i = 0; i < this.size; i++) {
            if (key == this.data[i]) {
                //记录位置
                pos = i;
            }
        }
        if (pos == -1) {
            System.out.println("没有key这个关键字");
        }
        //元素前置
        for (int i = pos; i < this.data.length - 1; i++) {
            this.data[i] = this.data[i + 1];
        }
        this.size--;
    }

打印顺序表

//打印顺序表
    public void print() {
        for (int i = 0; i < this.size; i++) {
            System.out.print(this.data[i] + " ");
        }
    }

获取顺序表长度

//获取顺序表长度
    public int size() {
        return this.size;
    }

清空顺序表

 //清空顺序表
    public void clear() {
        this.size = 0;
    }

下面是代码部分

MyArrayList类

import java.util.Arrays;   //copyOf方法的类声明

public class MyArrayList {
    public int[] data;     //用数组存放数据
    public int size;       //顺序表长度

    //size默认为0
    public MyArrayList() {
        //初始化分配5个能存放int类型数据的数组
        this.data = new int[5];
    }

    //添加数据
    public void add(int pos, int value) {
        //若数组空间不够,即扩大两倍
        if (this.size == this.data.length) {
            this.data = Arrays.copyOf(this.data, this.data.length * 2);
        }
        if (pos < 0 || pos > this.size) {
            System.out.println("位置不合法!");
            return;
        }
        //元素后置
        for (int i = this.size; i > pos; i--) {
            this.data[i] = this.data[i - 1];
        }
        //pos位置赋值
        this.data[pos] = value;
        this.size++;
    }

    //判断是否包含某个元素
    public boolean contains(int value) {
        for (int i = 0; i < this.size; i++) {
            if (this.data[i] == value) {
                return true;
            }
        }
        return false;
    }

    //查找某个元素对应的位置
    public int search(int value) {
        for (int i = 0; i < this.size; i++) {
            if (value == this.data[i]) {
                return i;
            }
        }
        System.out.println("不存在该值!");
        return -1;
    }

    //获取pos位置的元素
    public int getPos(int pos) {
        if (pos < 0 || pos >= this.size) {
            System.out.println("pos位置不合法!");
            return -1;
        }
        return this.data[pos];
    }

    //将pos位置的值设置成value
    public void setPso(int pos, int value) {
        if (pos < 0 || pos >= this.size) {
            System.out.println("pos位置不合法!");
            return;
        }
        this.data[pos] = value;
    }

    //删除顺序表第一次出现的关键字key
    public void remove(int key) {
        int pos = -1;
        for (int i = 0; i < this.size; i++) {
            if (key == this.data[i]) {
                //记录位置
                pos = i;
            }
        }
        if (pos == -1) {
            System.out.println("没有key这个关键字");
        }
        //元素前置
        for (int i = pos; i < this.data.length - 1; i++) {
            this.data[i] = this.data[i + 1];
        }
        this.size--;
    }

    //打印顺序表
    public void print() {
        for (int i = 0; i < this.size; i++) {
            System.out.print(this.data[i] + " ");
        }
    }

    //获取顺序表长度
    public int size() {
        return this.size;
    }

    //清空顺序表
    public void clear() {
        this.size = 0;
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值