线性表:数组、链表、栈、队列

线性表:数组 链表 栈 队列 。 线性表上的数据最多只有前和后两个方像)
非线性表:树、图

在这里插入图片描述在这里插入图片描述

数组

如何实现随机访问?

数组是一种线性数据结构,用连续的存储空间存储相同类型数据。
所以数组可以随机访问,但对数组进行删除插入,为了保证数组的连续性,就要做大量的数据搬移工作。

数组如何实现下标随机访问

在这里插入图片描述
计算机会给每个内存单元分配一个地址,计算机通过地址来访问内存中的数据

// 一维数组
a[i]_address = base_address + i * data_type_size
//二维数组
a[i][j]_address = base_address + ( i * n + j) * data_type_size

纠正数组的错误认识

数组的查找操作时间复杂度并不是O(1)。即便是排好的数组,用二分查找,时间复杂度也是O(logn)。
正确表述:数组支持随机访问,根据下标随机访问的时间复杂度为O(1)H2~O

低效的插入和删除

  1. 插入 删除:从最好O(1) 最坏O(n) 平均O(n)
  2. 插入时。
    如果数组中的数据是有序的,我们在某个位置插入一个新的元素时,那所有的数据都需要依次往后移动一位。
    如果数组中的数据是无序的,数组只是被当作一个存储数据的集合,直接将第 k 位的数据搬移到数组元素的最后,把新的元素直接放入第 k 个位置。
  3. 多次删除集中在一起,提高删除效率
    记录下已经被删除的数据,每次的删除操作并不是搬移数据,只是记录数据已经被删除,当数组没有更多的存储空间时,再触发一次真正的删除操作。即JVM标记清除垃圾回收算法。

警惕数组的访问越界问题

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值