数组和链表

作者: 仲冬初七 | 来源:发表于2018-09-27 11:31 被阅读9次

数组和链表

1. 内存的工作原理

​ 计算机将内存会分为很多格子(类似书柜),每个格子都会对应自己地址,就是内存地址

​ 每当计算机接收到存储命令时,计算机会告诉你一个内存地址,表示你的东西存在这个地址。

​ 当需要存储多个数据时,有两种基本存储方式:数组和链表

2. 数组和链表的差异

​ 1. 存储方式

​ 1.1 数组存储方式

​ 利用数组进行存储多项数据时,会需要计算机提供一排连续的位置,即是数组在存储的时候,必须保证内存地址是依次相邻的,且在添加数据时也必须保证有相邻的位置提供,附近没有相邻的位置,则必须整体迁移(类似和朋友看电影,必须要是相邻的位置,如果中途有其他朋友来,那么又要重新寻找有足够多空余并且相邻的位置)。为了避免这种中途添加数据会导致全部数据整体迁移的问题,可以提前请求多个相邻的位置,但是如果中途没有数据再次添加,那么就会导致资源的浪费。或者请求多个位置用完了,那么又要整天重新迁移位置。

所以在使用数组进行存储数据时,速度相对缓慢,且容易浪费资源

​ 1.2 链表的存储方式

​ 链表进行存储时,只需要有足够的内存空间即可进行存储。链表中的每个元素都会携带下一个元素的内存地址,因此在存储数据时,只需要修改上一个元素指向的内存地址即可。

链表在存储数据时,速度相对较快,且只需要有足够的内存空间即可进行存储。

​ 2. 查询方式

​ 2.1 数组的查询方式

​ 由于数组在存储时内存地址都是相邻的,因此你知道所有元素的内存地址,所以可以通过索引的方式进行查询,而一般数组的第一个元素的索引为0,即是从0开始依次累加顺序。

​ 数组支持顺序查询和随机查询。

数组在进行查询时的速度较快(O(1)),因为可以通过简单的数学运算可以马上知道你要查询元素位置.

​ 2.2 链表的查询方式

​ 由于链表在存储时是任意位置存储的,所以你要知道某个元素的地址,就必须先知道上一个元素的位置,依次类推,则你必须先知道第一个元素的位置,所以链表在查询时只支持顺序查询。

链表在查询时速度较慢(O(n)),因为无法通过简单的数学运算计算出某个元素的位置,必须要先知道上一个元素的位置

​ 3. 删除方式

​ 3.1 数组的删除方式

​ 数组在删除某个元素时,后面的元素必须依次向前移动。因此数组在删除元素时的速度较慢(O(n))。

​ 3.2 链表的删除方式

​ 链表在删除某个元素时,只需要修改上一个元素指向的地址即可。因此链表在删除元素时速度较快(O(1))

​ 4. 插入方式

​ 4.1 数组的插入方式

​ 数组在插入时必须要保证有足够的空间,如果没有足够的空间,那么需要整个数组复制到其他地方。因此在插入元素时数组速度较慢(O(n)).

​ 4.2 链表的插入方式

​ 链表在插入时,只需要修改上一个元素指向的位置即可。因此链表在插入时速度较快(O(1))。

3. 总结

​ 下面是数组和链表常见的操作运行时间。(注意:有且仅当能够立即访问要删除的元素时,运行时间方为O(1)

数组 链表
查询 O(1) O(n)
插入 O(n) O(1)
删除 O(n) O(1)

​ 从表格可以看出,数组和链表都有各自不同的优缺点。所以在使用时需要根据实际情况出发,来判断使用什么方式更加便捷。

​ 数组和链表是可以进行混合使用的。

​ 即在数组中存放一个链表的位置。这样混合后的储存方式,在查询时虽然不如数组,但是比链表块,且在插入和删除时不必链表慢。

相关文章

  • iOS知识复习笔记(19)---数据结构和算法1

    数组和链表的区别 数组静态分配内存,链表动态分配内存 数组内存中连续,链表不连续 数组元素在栈区,链表在堆区 数组...

  • 数据结构和算法

    线性结构 数组、 单链表和双链表 数组和链表区别: 数组:数组元素在内存上连续存放,可以通过下标查找元素;插入、删...

  • Redis-第十章节-链表

    目录 数组和链表 链表 对比 总结 1、数组和链表 数组: 数组会在内存中开辟一块连续的空间存储数据,这种存储...

  • 数据结构——链表

    目录 1、属性 2、链表和数组的区别 2.1、数组概述 2.2、数组和链表优缺点 2.3、链表和数组的比较 3、单...

  • 链表

    链表和数组一样也支持查找,插入,删除操作。最常见的三种链表是:单链表,双链表和循环链表。 链表和数组的区别:数组需...

  • C语言指针部分说明

    二级指针 函数指针 数组和链表 访问数组 访问链表 Makefile

  • 算法小专栏:选择排序

    本篇将重点介绍选择排序,在讲解选择排序之前,我们先复习一下数组和链表等知识。 一、数组 or 链表? 数组和链表作...

  • HashMap 相关面试题及其解答

    Q:HashMap 的数据结构?A:哈希表结构(链表散列:数组+链表)实现,结合数组和链表的优点。当链表长度超过 ...

  • 这21个刁钻的HashMap面试题,我把阿里面试官吊打了

    1:HashMap 的数据结构? A:哈希表结构(链表散列:数组+链表)实现,结合数组和链表的优点。当链表长度超过...

  • 面试:HashMap 夺命二十一问!

    1:HashMap 的数据结构? A:哈希表结构(链表散列:数组+链表)实现,结合数组和链表的优点。当链表长度超过...

网友评论

    本文标题:数组和链表

    本文链接:https://www.haomeiwen.com/subject/paqeoftx.html