数组是什么样的?

时间:2014-01-14 20:59:23

标签: arrays list pointers data-structures

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

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

但是,插入阵列需要更长的时间。

问题: 如何构建普通的静态数组?它是内存上的一些邻居区域吗?这是为什么它的细胞没有彼此的指针?

谢谢!

3 个答案:

答案 0 :(得分:1)

  

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

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

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

此O(N)插入时间的权衡是O(1)查找时间。 (称为随机访问)。因为你有一个指向内存开头的指针,并且你知道你想要的项目的索引,所以获取内存地址是一个微不足道的计算。

答案 1 :(得分:0)

我的朋友,因为我们知道数组在连续的内存分配方案上工作,所以它总是在静态时间内保持内存,并且就其所依赖的复杂性而言

喜欢

 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)

答案 2 :(得分:0)

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