zoukankan      html  css  js  c++  java
  • 数组

    数组

    数组概念

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

    线性表

    线性表就是数据排成像一条线一样的结构。表就是数据排成像一条线一样的结构。每个线性表上的数据最多只有前和后两个方向。数组、链表、队列、栈等也是线性表结构。

    非线性表

    二叉树、堆、图等,在非线性表中,数据之间并不是简单的前后关系。

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

    优点:随机访问(下标查找数据)

    缺点:删除、插入数据非常的低效

    数据存储原理和为啥下标从0开始

    案例

    int[] a = new int[10]

    右边的1000到1039为连续的内存空间,其中每个数据占用4个字节数据,因为int

    取值代码:

    a[i]_address = base_address + i * data_type_size
    

    其中 data_type_size 表示数组中每个元素的大小

    假设我要拿a[1]

    a[1]=999+4*1=1003           1000-1003
    

    如果第一个元素的索引不从0开始,每一次都要进行一次-1,对于cpu来说,就是多一次减法指令,以0开始可以提高性能。

    时间复杂度分析

    根据索引取值

    由于根据索引取值,n和代码是不影响的,代码执行时间为一个常数,时间复杂度为O(1)

    插入数据

    依次从0为开始,时间复杂度为1+2+...n/n=O(n)

    如果数据不是有序的,这里我们只是把它当做容器

    可以用这种插入方法,时间复杂度为O(1)

    删除数据

    删除数据和插入数据时间复杂度都为O(n)

    删除数据减小时间复杂度,骚操作--标记清除思想

    假如我们要删除a,b,c三个元素,我们只需要把它们记下来,直到数组被删除完全,在执行一次删除

    其实这就是垃圾回收经常使用的标记-清除思想

    极客时间版权所有: https://time.geekbang.org/column/article/40961

  • 相关阅读:
    RQNOJ 34 紧急援救
    Codevs 2080 特殊的质数肋骨
    POJ2975 Nim
    Bzoj1016 最小生成树计数
    POJ3613 Cow Relays
    POJ1386 Play on Words
    [从hzwer神犇那翻到的模拟赛题] 合唱队形
    HDU2824 The Euler function
    HDU1576 A/B
    HDU2669 Romantic
  • 原文地址:https://www.cnblogs.com/zx125/p/11681650.html
Copyright © 2011-2022 走看看