44

数据结构中数组和链表的区别

 4 years ago
source link: https://www.tuicool.com/articles/aQ7jU37
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

数组和 链表 之间的主要区别在于它们的结构。数组是基于索引的数据结构,其中每个元素与索引相关联。另一方面,链表 依赖于引用,其中每个节点由数据和对前一个和下一个元素的引用组成。

  • 数组是数据结构,包含类似类型数据元素的集合,而链表被视为非基元数据结构,包含称为节点的无序链接元素的集合。
  • 在数组中元素属于索引,即,如果要进入第四个元素,则必须在方括号内写入变量名称及其索引或位置。但是,在链接列表中,您必须从头开始并一直工作,直到达到第四个元素。
  • 虽然访问元素数组很快,而链接列表需要线性时间,但速度要慢得多。
  • 数组中插入和删除等操作会占用大量时间。另一方面,链接列表中这些操作的性能很快。
  • 数组具有固定大小。相比之下,链接列表是动态和灵活的,可以扩展和缩小其大小。
  • 在数组中,在编译期间分配内存,而在链接列表中,在执行或运行时分配内存。
  • 元素连续存储在数组中,而它随机存储在链接列表中。
  • 由于实际数据存储在数组中的索引中,因此对内存的要求较少。相反,由于存储了额外的下一个和前一个引用元素,因此链接列表中需要更多内存。
  • 此外,阵列中的内存利用效率低下。相反,内存利用率在阵列中是有效的。

图表对比: VnUnumi.jpg!web

需要额外说明的是: 即便是排好序的数组,你用二分查找,时间复杂度也是 O(logn)。所以,正确的表述应该是,数组支持随机访问,根据下标随机访问的时间复杂度为 O(1)

如果你的代码对内存的使用非常苛刻,那数组就更适合你。因为链表中的每个结点都需要消耗额外的存储空间去存储一份指向下一个结点的指针,所以内存消耗会翻倍。而且,对链表进行频繁的插入、删除操作,还会导致频繁的内存申请和释放,容易造成内存碎片,触发语言本身的垃圾回收操作。

参考链接: difference between array and linked list


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK