课程名称:JavaScript版数据结构与算法 轻松解决前端算法面试
课程章节:5-1 链表简介
主讲老师:lewis
熟悉链表和数组之间的区别
举简单的两个生活中的例子。
简单一个例子就是生活中的麻将
在开始摸牌的时候,我们每个人手里的牌数是固定的,相当于在内存中,我们已经申请好了内存地址。我们每抓一张牌相当于就是在数组里面插入一个数据,在每次插入的时候,都需要把插入位置后的牌都往后移动。如果桌面上没有足够的空间,还需要把整个牌挪到另一个地方去。
比起数组的有序排列,我们每次使用的时候,都会占用内存连续的一段内存空间,而链表不需要。链表中的元素可以存储在内存的任何地方
链表中的每一个元素都存储了下一个元素的地址,通过这个下标将这些分散在各个内存中的数据都关联起来。
就像是解密的游戏,你只有在完成了第一个任务后,才会告诉你第二个任务的任务地点,然后去做了任务二,就又得到了任务三的地点。以此类推。
数组的元素都有下标(索引),下标是从0开始而不是从1开始。
常见操作的时间复杂度
操作 | 数组 | 链表 |
---|---|---|
读取 | O(1) | O(n) |
插入 | O(n) | O(1) |
删除 | O(n) | O(1) |
我觉得数组比起链表来说,使用的更多一些,因为数组支持随机访问。数据的访问方式有两种:顺序访问和随机访问。顺序访问就是从第一个元素开始,一个一个往下数。链表只能支持顺序访问。要读取链表的第n个元素,就要数n-1下。而数组就不要,直接通过索引就好了。