我对算法和数据结构感兴趣,并且有一个小问题。
我知道Generic列表包含具有指向下一个单元格的指针的“单元格”,因此将元素“插入”到列表中将需要O(1)(恒定时间)。
但是,插入阵列需要更长的时间。
问题: 如何构建普通的静态数组?它是内存上的一些邻居区域吗?这是为什么它的细胞没有彼此的指针?
谢谢!
答案 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)
是的,正确的数组存储在连续的内存中,该内存是静态的,并在启动进程时分配,而不是在运行时分配