美文网首页
数组,链表

数组,链表

作者: 景悦 | 来源:发表于2020-07-21 16:55 被阅读0次

为什么数组查询比链表快?而插入删除比链表效率低?

  • 顺序存储可以想象成吃饭排队,每个人领的号都是按顺序来的,服务员只要喊号就里立即可以找到对应的人,新来的人都自动加到队尾,如果有人想插队,那么从他插队的位置后面所有的人都要挪动位置。
  • 链接存储可以想象成手拉手做游戏,每个人只知道自己手拉的是谁,想要找到某个人必须从一个节点开始往一个方向按顺序一个一个查,直到查到这个人,新来的人可以插到任意两个人之间,只要原来的那两个人把手放开,和新来的拉起手即可,不需要其他人都跟着挪动。

1.数据存储结构分为顺序存储、链接存储、索引存储、散列存储。
2.数组属于顺序存储,用一段连续的内存位置来存储。
3.链表属于链接存储,用一组任意的存储单元来存储,不要求物理上相邻。

数组和链表的优缺点:
数组
使用方便,,查询效率比链表高,内存为一连续的区域
缺点:大小固定,不适合动态存储,不方便动态添加。
链表
优点:可动态添加删除,大小可变,内存可能是不连续内存,链式存储。
缺点:只能通过顺次指针访问,查询效率低。

访问:
数组可以随机访问其中的元素,链表则必须是顺序访问,不能随机访问
链表可以随意扩大,数组不能

处理速度由快到慢排序:
CPU寄存器 -> 缓存 -> 内存 ->硬盘

  • CPU 寄存器 – immediate access (0-1个CPU时钟周期)
  • CPU L1 缓存 – fast access (3个CPU时钟周期)
  • CPU L2 缓存 – slightly slower access (10个CPU时钟周期)
  • 内存 (RAM) – slow access (100个CPU时钟周期)
  • 硬盘 (file system) – very slow (10,000,000个CPU时钟周期)

各级别的存储器速度差异非常大,CPU寄存器速度是内存速度的100倍,这就是为什么CPU产商发明了CPU缓存。而这个CPU缓存,就是数组和链表区别的关键所在。

总结
CPU缓存会把一片连续的内存空间读入,因为数组结构是连续的内存地址,所以数组全部或者部分元素被连续存在CPU缓存里面,平均读取 每个元素的时间只要3个CPU时钟时间。而链表的节点分散在堆空间里面,这时候CPU缓存帮不上忙,只能是去读取内存,平均读取时间需要100个CPU时钟周期。 这样算下来,数组访问的速度比链表快33倍!

而数组大小固定,插入和删除都需要移动元素,链表可以动态扩充,插入删除不需要移动元素,只需要更改元素中的指针。所以链表的插入删除比数组效率高。

查询比数组快,删除插入效率又高的方式就是散列存储,hash

相关文章

  • 静态链表及C#实现

    静态链表 静态链表是用数组模拟动态链表。 静态链表结构描述 首先,静态链表使用数组来模拟动态链表。数组存放一个节点...

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

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

  • 数据结构与算法 链表

    链表:零散的内存空间数组:连续的内存空间链表类型:单链表、双向链表、循环链表 链表和数组的比较: 数组:查询:按索...

  • 链表

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

  • 数据结构——链表

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

  • HashMap常见问题

    实现原理hashmap基于数组+链表+红黑树实现,jdk1.8以前是基于数组+链表。 为啥用数组+链表用数组是因为...

  • Java中的Map

    实现类:HashMap:数组+链表(1.7)、数组+链表+红黑树(1.8)LinkedHashMap:链表Tree...

  • 数据结构和算法

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

  • Redis-第十章节-链表

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

  • HashMap的put方法源码(jdk1.8)

    HashMap是底层结构是数组+链表,数组是Node(Entry)数组,链表是Node组成的链表,充分利用了Nod...

网友评论

      本文标题:数组,链表

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