数据结构基础:线性表-顺序表(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号位置元素
    }
}

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

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
队列(Queue)是一种先进先出(First-In, First-Out, FIFO)的数据结构。在队列中,只允许在一端进行插入操作,而在另一端进行删除操作。添加元素的操作称为入队(enqueue),删除元素的操作称为出队(dequeue)。 栈(Stack)是一种后进先出(Last-In, First-Out, LIFO)的数据结构。在栈中,只允许在一端进行插入和删除操作。添加元素的操作称为入栈(push),删除元素的操作称为出栈(pop)。 链(Linked List)是一种非连续的、非顺序数据结构。链中的数据元素通过链来进行连接。各个元素(节点)包含了存储数据的内容以及指向下一个元素的指针。链可以分为单向链和双向链两种类型。 线性(List)是数据元素按照一定顺序排列的数据结构线性中的元素可以是相同类型的,也可以是不同类型的。线性的特性包括元素的有序性、位置的固定性以及元素的可重复性。线性可以通过数组或链实现。 排序(Sorting)是对一组数据元素进行按照一定规则重新排列的操作。排序的目的是为了使数据具备一定的有序性。常见的排序算法包括冒泡排序、插入排序、选择排序、快速排序、归并排序等。排序算法的选择取决于数据量的大小、排序的稳定性要求以及时间和空间复杂度的限制。 总结起来,队列和栈是两种基本的数据结构,链线性是数据元素排列的方式,排序是一种对元素进行排列的操作。理解这些知识点可以帮助我们更好地理解和应用Java数据结构和算法。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值