【在厨房想30天的演算法】Day 07 资料结构:阵列 Array

Aloha~又是我少女人妻 Uerica ! 中秋节过後就是秋天了,秋高气爽是最适合旅游的日子了,可惜连假已过而且还要写铁人赛文章呢~哈哈哈哈哈哈哈5555...


阵列 (Array)

今天要来聊聊大家耳熟能详的阵列了!一般的程序语言都会内建阵列的资料型别 (type),除了少部分语言是由杂凑表、连结串列、搜寻树等来实现,像 Javascrpt 就是使用类似杂凑表资料结构的方式。

阵列的定义与特性

阵列与连结串列相同,也是属於线性资料结构,但阵列在宣告时就得定义记忆体空间的大小 (阵列长度),且是连续的储存在记忆体空间,而阵列内所储存的资料都需是相同型态。

而阵列在插入与删除资料元素较为费时,因是连续的储存在记忆体空间,不像连结串列仅改变指标指向的节点即可,阵列在插入与删除资料元素都得往後或往前移动所有元素。但在存取时因是连续性的资料,记忆体可计算出内容的索引 (index) 位置,所以能直接做存取,又称随机存取 (Random Access)。

  • 优点
    • 宣告时就得定义阵列长度,若是确定长度且不会变的资料,因只存资料元素,会比连结串列来得省空间。
    • 在记忆体中是连续储存的缘故,可用索引做随机存取,且存取效能较快。
  • 缺点
    • 宣告时得定义阵列长度,若无法确定或时常插入、删除元素,会造成记忆体占用空间过多或过少的可能。
    • 因是连续储存,插入或删除资料元素较为费时。

yVgHEh1

常见的基本操作

插入资料元素

若需要插入新的资料元素,要先确保阵列有足够长度,并由最後一个资料元素开始向後移动,直到需插入新资料元素的位置空出来。

如图示,今天要插入 data New 在data A与data B之间,首先须先确认阵列长度是否足够,再由最後方开始往後移动,直到空出欲插入的位置
MaMpHTK

R7dlqGe

0JqoqV9

然後就当啷~成功了

4Pzcy15

删除资料元素

若要删除阵列中的资料元素,在取出欲删除的资料元素後,後方的资料元素需要一个个全部向前移动,直到所有资料元素都接续在一起。

现在想将 data B 的资料删除,要先将 data B 取出,之後让後方的 data C 往前接续
LSsnL01

znCLruS

cZB0BvS

关於阵列的时间复杂度

由於阵列属於随机存取,所以在存取任一资料元素时,时间复杂度为 O(1)。若需要插入或删除资料元素,因要一个个调整,故时间复杂度为 O(n)。

参考资料:

JavaScript 学演算法(四)- 阵列 Array


好搭!今天就先到这边啦!感谢阅读~今年连假跟去年连假一样都是在写铁人赛文章,参赛的各位都是防疫大使呢!呵呵呵呵呵...明天见啦掰掰~


<<:  登录档进阶清理与重组--什麽是有必要的整理

>>:  Day 8:506. Relative Ranks

[区块链&DAPP介绍 Day1] 什麽是区块链

又到了一年一度的铁人赛,这几年区块链的议题,一起都有一定热度,但自己本身一直都没有什麽兴趣,终於想说...

[第十六只羊] 迷雾森林舞会X 热线你和我 hotwire 导入

天亮了 昨晚是平安夜 关於迷雾森林故事 水底世界 就在泰迪跳进水中游水的瞬间 水流与泰迪身上的的毛高...

DAY 10 Big Data 5Vs – Velocity(多样性) DynamoDB

对於「半结构化」类型的资料可以存放至NoSQL 资料库*之中。NoSQL 资料库常见於需要较快写入速...

初学者跪着学JavaScript Day12 : 麻烦的JS加法

一日客语:中文:吃什麽 客语:(ㄘ1声)骂诶 想不到吧~加法可以写一篇,不要怀疑就是要拖台钱(喂~)...

Day 20: Security Hub 新帐号加入、Insight设定

上篇我们讲到了有/没有使用AWS Organization 启用Security hub的状况,那如...