数组

一、数组的定义

数组Array是一种线性表数据结构,它用一组连续的内存空间,来存储一组具有相同类型的数据
1.线性表

线性表是指数据排成像一条线一样的结构,每个线性表上的数据最多只有前后两个方向。常见的线性结构如:队列、栈、数组、链表等

在这里插入图片描述
非线性结构如:二叉树、堆、图
在这里插入图片描述

2.连续的内存空间和相同的数据类型

随机访问:根据数组的下标随机访问数组中的元素
在这里插入图片描述
计算机给每个内存单元分配一个地址,通过地址访问内存中的数据。例如:计算机给数组a[10],分配一个连续的内存空间1000-1039,其中base_address=1000代表内存首地址
当计算机需要随机访问某元素时,通过寻址公式计算出元素存储的内存地址


a[i]_address = base_address + i * data_type_size

数组支持随机访问,根据下标随机访问的时间复杂度为O(1)<?font>

二、数组的插入和删除
1.插入操作

【数组有序】假设数组的长度为n,在数组的第k个位置插入一个新元素,需要将k-n这区间元素依次后移

  • 如果是在数组的末尾插入,则最好的时间复杂度为O(1)
  • 如果是在数组的开头插入,则最坏的时间复杂度为O(n)
  • 平均复杂度为(1+2+…n)/n=O(n)。

【数组无序】如果将某个元素插入到第k个位置,为了避免数据搬移,直接将第k位置的数据搬至数组末尾,将新元素放到第k个位置
在这里插入图片描述

2.删除操作

如果要删除某个元素。为了内存的连续性,需要将数据搬移

  • 删除末尾元素,最好的时间复杂度为O(1)
  • 删除开头元素,最坏的时间复杂度为O(n)
  • 平均时间复杂度O(n)

在这里插入图片描述
我们可以先记录下已经删除的数据。每次的删除操作并不是真正地搬移数据,只是记录数据已经被删除。当数组没有更多空间存储数据时,我们再触发执行一次真正的删除操作,这样就大大减少了删除操作导致的数据搬移。JVM标记清除垃圾回收算法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值