zoukankan      html  css  js  c++  java
  • 数据机构与算法学习(三)- 数组

    数组的概念

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

    根据定义里边的关键词详解数组定义。

    第一是线性表。 线性表就是数据拍成像一条线一样的结构。每个线性表上的而数据最多只有前和后两个方向。第二个是连续的内存控件和相同类型的数据

    因为有这两个特点,才有了一个堪称“杀手锏”的特性:“随机访问”。也导致了低效插入和删除操作。

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

    插入操作

    假设数组的长度是n,现在,如果我们需要将一个数据插入到数组中的第K个位置。为了把第K个位置腾出来,给新来的数据,我们需要将第K~N这部分的元素都顺序地往后挪一位。最好是在末尾插入O(1),坏在开头插入O(n),平均时间复杂度为O(n).

    优化方法,假设数组中存储的数据没有规律只是一个存储集合。那么可以将K位置的数移动到数组的最后,将新数据插入K的位置,这样的话,插入为O(1).

    删除操作

    和插入类似需要搬移数据,最好是在末尾删除O(1),坏在开头删除O(n),平均时间复杂度为O(n).

    优化方法,再删除数据后不进行真正的删除,只是标记数据,到数组空间不够用时,在执行一次删除操作。

    警惕数组越界

    在C语言中,只要不是访问受限的内存,所有的内存控件都是可以自由访问的。越界后会被执行到一块未定义的空间去执行操作,导致程序异常。

    容器能否完全代替数组

    对于业务开发,直接使用容器就足够了,省时省力。如果是做一些非常底层的开发,比如开发网络框架,性能要求做极致,这个时候数组就会优于容器。

  • 相关阅读:
    点击标签,通过jquery.jcarousel动态axaj加载内容,实现跑马灯效果
    FreeSwitch VoiceMail 语音信箱 研究
    FreeSwitch IVR VoiceMail 语音信箱
    微软企业库连接access,web.config相对路径配置
    FreeSWITCH 添加中文语音包
    FreeSwitch通过远程接口返回动态IVR语音菜单
    FreeSwitch注册上了,但拨打电话,提示Rejcted by acl "domians". Falling back to Digest auth
    ACM:密码截获
    c++ ACM:递归实例
    CSS:浏览器兼容性图表
  • 原文地址:https://www.cnblogs.com/OneSky-Mi/p/14388179.html
Copyright © 2011-2022 走看看