数据结构与算法学习总结--数组

数组定义

数组是一种线性表数据结构,用一块连续的内存空间,来存储相同类型的一组数据。

基本操作及实间复杂度

查找 时间复杂度O(1)
注:根据下标直接查找,时间复杂度O(1)
查找某元素是否在数组中(顺序查找时间复杂度O(n), 若数组有序,可使用二分查找O(logN))

插入 时间复杂度 O(n)
注:若不要求数组有序,可直接在末尾插入,时间复杂度O(1)
若是要在指定位置插入(但不要求有序),可以将插入位置的元素搬移到末尾,然后将要插入的元素插入到该位置,时间复杂度O(1)
若要求有序,需要将插入位置的元素都往后移一位,然后再插入元素,时间复杂度O(n)(最好O(1), 最坏O(n), 平均O(n))

删除 时间复杂度O(n)
若要删除第K个元素,为保证存储的连续性,需要搬移删除元素之后的数据,时间复杂度(最好O(1), 最坏O(n), 平均O(n))
优化:每次删除元素时,并不搬移,只是标记删除的元素,在没有剩余存储空间存储数据时,触发真正的删除操作。这样可以大大减少删除操作导致的数据搬移。(类似JVM的标记清除垃圾回收算法)

特点

优点:实现简单、效率高

缺点:大小固定,数组越界问题

注意事项

警惕数组的访问越界问题
数组越界在C语言中是一种未决行为,访问数组的本质就是访问一段连续的内存,只要通过偏移计算得到的内存是可用的,程序就不会报错,因此数组越界会导致莫名其妙的逻辑错误。

容器和数组使用场景总结

表示多维数据时,使用数组更加直观
数据大小已知,并且对数据的操作比较简单时,使用数组更方便

如果是业务开发,使用容器,省时省力
如果是底层开发,追求极致的效率,则选择使用数组

数组下标为什么是从0开始

如果是从1开始计数,计算内存地址的时候,会多出一个减法运算,增加CPU消耗
历史原因,保持和C语言语法一致

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值