数据结构基础:线性表-顺序表(Java实现)

线性表(Linear List)

线性表是由同一类型的数据元素构成的有序序列的线性结构。线性表中元素的个数就是线性表的长度,表的起始位置称为表头,表的结束位置称为表尾,当一个线性表中没有元素时,称为空表。

线性表功能

  • 获取指定位置上的元素:直接获取线性表指定位置 i 上的元素。
  • 插入元素:在指定位置 i 上插入元素。
  • 删除元素:删除指定位置 i 上的元素。
  • 获取长度:返回线性表的长度

顺序表

底层依然采用顺序存储实现的线性表,称为顺序表
在这里插入图片描述
顺序表的插入与删除

插入元素时,首先需要将插入位置腾出来,将原来该位置及之后的元素想后移动。

删除元素时,因为顺序表是紧凑的,不能出现空位,此时就需要将该位置后的所有元素向前移动。
在这里插入图片描述

Java代码实现:

public class ArrayList<E> {//存储数据类型待定,先用泛型E
    private int size = 0; //当前已经存放的元素数量
    private int capacity = 10; //当前顺序表的容量
    private  Object[] array = new Object[capacity];//底层存放数据的数组

    //插入元素方法
    public void add(E element,int index){//element:插入元素,index:插入位置
        if(index<0 || index>size){ //判断插入位置是否合法
            throw new IndexOutOfBoundsException("插入位置非法,合法插入位置为0~"+size);
        }
        //数组容量扩容
        if(size>=capacity){
            int newcapacity = capacity*2;//扩容为原来的两倍
            Object[] newArray = new Object[newcapacity];
            System.arraycopy(array,0,newArray,0,size);
            array = newArray;
            capacity = newcapacity;
        }
        for(int i = size ; i > index ; i--){
            array[i] = array[i-1];
        }
        array[index] = element;
        size++;
    }

    //删除元素方法
    public E delete(int index){//index:删除元素位置
        if(index < 0||index>size-1){
            throw new IndexOutOfBoundsException("删除位置非法,合法删除位置为0~"+(size-1));
        }
        E e = (E) array[index];
        for (int i = index; i<size;i++){
            array[i] = array[i+1];
        }
        size--;
        return e;
    }
    
//获取某一位置上的元素
    public E get(int index){
        E e = (E) array[index];
        return e;
    }

    @Override
    public String toString() {//重写toString 方法,打印顺序表
        System.out.println("当前元素数量"+size);
        System.out.println("当前顺序表容量"+capacity);
        StringBuilder builder = new StringBuilder();
        for(int i = 0; i<size;i++){//遍历顺序表
            builder.append(array[i]).append(" ");
        }
        return builder.toString();
    }
}

测试类

public class Main {
    public static void main(String[] args) {
        ArrayList<String> list = new ArrayList<>();
        for(int i = 0;i<=30;i++){
            list.add(i+"",i);
        }
        list.add("add",3);//将字符串"add"添加到3号位置
        System.out.println(list);
        list.delete(3);//删除第四位元素
        System.out.println(list);
        System.out.println("您要查询的数为:"+list.get(5));//获取5号位置元素
    }
}

结果展示
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值