美文网首页
[AlgoGo]线性存储结构-数组

[AlgoGo]线性存储结构-数组

作者: 周瑞不是同端 | 来源:发表于2020-09-03 14:17 被阅读0次

定义

数组(Array):一种线性表数据结构,使用连续内存空间存储相同数据类型的一组数据。
线性表:线性结构,只有前驱和后继元素,常见的有数组、链表、栈、队列。
非线性表:不止有前后关系,常见的有堆、图、树

优点-支持“随机访问”

数组的“随机访问”特性由以下3点保证:

  1. 数组是线性结构
    所有数据线性存储,只有一个前驱一个后继。
  2. 连续内存空间
    数据在内存中占用连续的内存空间,相邻的数据在内存中的存储地址也相邻。
  3. 相同类型数据结构
    每个数据在内存中占用的大小都相同。

数组元素的寻址公式可以表示为:

arr[index]_address = base_address + index * data_type_size

可以根据索引直接访问任意位置元素的内存空间,实现“随机访问”。此处可以解释为什么数组下标从0开始,可以将数组下表看作内存地址的偏移,第一个元素相对首地址的偏移为0,所以下标是0。

缺点-插入删除的低效

插入
在指定位置插入数据时,需要将该位置之后的所有数据整体向后移动,时间复杂度为O(n)。如果数组是无序的,不关心元素的顺序的话,可以将插入元素所在位置的数据交换至数组末尾,再将元素插入。这样可以使插入时间复杂度为O(1)。
删除
为了保证内存空间的连续性,删除指定位置的元素后需要将此位置之后的元素整体前移,时间复杂度为O(n)。有一种解决方案是标记清除算法,删除元素只是将元素标记删除,当数组内存空间不足时再统一将已删除的元素内存空间回收,这样避免了多次移动元素带来的时间消耗。

数组使用注意事项

  1. 避免越界访问
  2. 使用容器类时最好根据需要指定大小

相关文章

  • [AlgoGo]线性存储结构-数组

    定义 数组(Array):一种线性表数据结构,使用连续内存空间存储相同数据类型的一组数据。线性表:线性结构,只有前...

  • [AlgoGo]线性存储结构-链表

    与数组的对比 方面数组链表内存空间连续离散插入删除O(n)O(1)随机访问O(1)O(n) 链表插入、删除操作不需...

  • 基本数据结构底层原理和总结

    基本数据结构解析 逻辑结构分为:集合,线性,树,图。存储结构分为:线性存储,链式存储,索引存储,has存储。 数组...

  • 线性表之顺序存储结构

    线性表=顺序存储结构 +链式存储 结构 顺序存储结构:物理上连续(arraylist、数组) 增删改查排序 数组 ...

  • 大话数据结构 - 链表

    代码GitHub地址 链表概述 数组和链表都是线性存储结构的基础实现,栈和队列都是线性存储结构的应用 数组优缺点 ...

  • [AlgoGo]操作受限的线性存储结构

    操作受限的线性存储结构包括栈和队列。对于操作的限制是为了确保业务场景使用中的安全,确保不会被其他多余操作破坏。 栈...

  • 线性结构

    线性结构的两种存储方式:数组(顺序存储)和链表(链式存储)。

  • Java中常用数据结构

    线性结构 非线性结构 一.线性结构 数组 特点:我们都知道数组中的元素在内存中连续存储的,可以根据是下标快速访问元...

  • C++线性表的链式存储结构

    C++实现线性表的链式存储结构: 为了解决顺序存储不足:用线性表另外一种结构-链式存储。在顺序存储结构(数组描述)...

  • 线性表--数组(Array)

    线性表的顺序存储结构--数组(Array) 数组(Array)是一种线性表数据结构。他用一组连续的内存空间,来存储...

网友评论

      本文标题:[AlgoGo]线性存储结构-数组

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