数据结构是指计算机存储、组织数据的方式:

1.数组:把数据码成一排进行存放,是有序排列的同类数据元素的集合,是一种线性表数据结构;

  特点: 1)数组是相同元素类型的数据集合

      2)数组中的各元素的存储是有先后顺序的,它们在内存中按照这个先后顺序连续存放在一起,并通过索引来访问

      3)数组创建之后,数组容量是固定的(不满足时需要进行扩容)

      4)可以通过下标进行数据访问

  拓展: 数组扩容    1)创建一个容量大于需要扩容数组的新数组,将原数组的引用指向新的数组,原数组失去引用会被 GC 自动回收

            2)调用系统自带的java.util.Arrays类中的方法对数组进行动态扩容,调用格式为Arrays.copyof(原数组名,扩容后的数组大小)

ArrayList 的底层是用动态数组来实现的。我们初始化一个ArrayList 集合还没有添加元素时,其实它是个空数组,只有当我们添加第一个元素时,内部会调用扩容方法并返回最小容量10,也就是说ArrayList 初始化容量为10。 当前数组长度小于最小容量的长度时(前期容量是10,当添加第11个元素时就就扩容),便开始可以扩容了,ArrayList 扩容的真正计算是在一个grow()里面,新数组大小是旧数组的1.5倍,如果扩容后的新数组大小还是小于最小容量,那新数组的大小就是最小容量的大小,后面会调用一个Arrays.copyof方法,这个方法是真正实现扩容的步骤(此文出处:https://blog.csdn.net/weixin_47796247/article/details/127785886)

2.栈:是一种线性表数据结构;

   特点:每次新增加(进栈或者压入栈)和删除(出栈或者退栈)数据都需要从栈顶开始操作,遵循“后进先出”的原则(LIFO);

3.队列:是一种线性表数据结构;

  特点:只能在头尾两端进行操作,入队时只能从队尾添加元素(enQueue),出队时只能从队头移除元素(deQueue),遵循“先进先出”的原则(FIFO)

  循环队列思想(数组为例):实际是“假溢出”,出队之后剩余的空间可以继续被入队数据使用,理解称为一个闭环,通过比较队头元素下标和队尾元素下标与数组长度求余的余数来判定,相等时队列为满队,

 4.链表:

  链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中节点的指针(引用)次序实现的,每个节点包含一个存储数据的数据域和一个存储下一个节点地址的指针域;

  特点:链表的存储方式为随机存储,访问方式为顺序访问;相对数组比较,存储方便,不需要考虑容量问题,但是访问相对困难,需要通过头结点依次查找下一个节点;

   

posted on 2023-02-22 23:44  刘若水  阅读(21)  评论(0)    收藏  举报