【问题标题】:What do arrays look like?数组是什么样子的?
【发布时间】:2014-01-14 20:59:22
【问题描述】:

我对算法和数据结构感兴趣,有一个小问题。

我知道通用列表包含具有指向下一个单元格的指针的“单元格”,因此将元素“插入”到列表中需要 O(1)(恒定时间)。

但是,插入数组需要更长的时间。

问题: 普通的静态数组是如何构建的?它是内存上的多个相邻区域吗?这就是为什么它的单元格没有相互指向的指针吗?

谢谢!

【问题讨论】:

    标签: arrays list pointers data-structures


    【解决方案1】:

    它是内存上的多个相邻区域吗?

    是的。数组是一个连续的内存区域。

    将元素插入特定位置时,需要将其后的每个元素向下移动 1 个空格。如果没有更多空格,您还必须潜在地创建一个新数组并复制所有元素。

    这个 O(N) 插入时间的折衷是 O(1) 查找时间。 (称为随机访问)。因为你有一个指向内存开头的指针,并且你知道你想要的项目的索引,所以得到内存地址是一个简单的计算。

    【讨论】:

      【解决方案2】:

      我的朋友,我们知道数组在连续内存分配方案上工作,所以它总是在静态时间维护内存,并且就复杂性而言,它取决于它

      喜欢

       Operation                      Array     Singly Linked List
          Read (any where)            O(1)           O(n)
          Add/Remove at end           O(1)           O(n)
          Add/Remove in the interior  O(n)           O(n)
          Resize                      O(n)           N/A
          Find By position            O(1)           O(n)
          insertion at the beg.       O(n)           O(1)
      

      【讨论】:

        【解决方案3】:

        是的,正确的数组存储在连续内存中,该内存是静态的,在进程启动时分配,而不是在运行时分配

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-10-31
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多