【数据结构与算法】数组

作者: Lee_DH | 来源:发表于2020-02-16 23:18 被阅读0次

一、是什么

一种用连续内存空间,存储相同类型数据线性表数据结构
  • 连续内存空间: 所以插入、删除操作低效,随机访问高效
  • 线性表: 数据像一条线一样的结构,线性表上的数据最多只有前和后两个方向。数组、链表、队列、栈都属于线性表结构,而树、堆、图属于非线性表结构。

二、使用场景

  • 存储数据容器
  • 保存数据映射关系,方便下标取数

三、下标访问工作原理

address[i] = base_address + i * data_type_size

  • address[i]: 下标i地址
  • base_address: 数组首地址
  • i: 即是数组下标,也是相对于首地址的偏移量
  • data_type_size: 数组中每个元素的大小(数据类型的大小),例如int是4个字节

四、优劣

  • 优点:
    根据下标随机访问的时间复杂度是O(1)
  • 缺点:
    删除和插入操作低效
  • 缺点优化:
  1. 对于无序的数组(数组只是被当做存储数据的集合),要想将某个数据插入到第k个位置,为了避免大规模的数据搬移,直接将第k位的数据搬移到数组元素最后,把新元素直接放入第k个位置
  2. 删除多个元素,为了避免内存空洞而产生的多次数据搬移操作,可以记下已经删除的数据,待最后触发一次真正的删除操作,减少数据搬移的次数

五、替代性技术

  • 链表
  • 队列

六、延伸思考

为什么编程语言中的数组是从0开始编号

从数组存储的内存模型看,下标最确切的定义应该是偏移,对于随机访问地址公式:
address[i] = base_address + i * data_type_size
如果数组从1开始计数,公式将变成:
address[i] = base_address + (i-1) * data_type_size,
对比这两个公式,发现从1开始编号,每次随机访问都多一次减法运算,对于CPU来说,多了一次减法指令

相关文章

  • 重温:数据结构与算法 - 03数组

    数据结构与算法之美 - 数组 数据结构与算法之美-学习大纲 什么数组? 数组是一种 线性表 数据结构。它用一组 连...

  • Hash算法

    数据结构与算法分析:大纲数据结构:数组算法:hash算法算法:排序算法Java实现 1 Hash算法? 将任意长度...

  • 数据结构:数组

    00数据结构与算法分析:大纲01数据结构:数组02数据结构:链表03数据结构:栈03数据结构:队列 数组 数组是一...

  • Swift 实现 7 种常见的排序算法

    排序算法可以说是数据结构与算法当中最为基础的部分,针对的是数组这一数据结构。将数组中的无序数据元素通过算法整理为有...

  • 数据结构与算法学习开篇

    数据结构与算法知识图谱 20个最常用的、最基础数据结构与算法 10个数据结构:数组、链表、栈、队列、散列表、二叉树...

  • 工作消失而面试却长存的算法与数据结构

    工作消失而面试却长存的算法与数据结构: 优秀的算法和数据结构被封装到了Java的集合框架之中 数据结构考点: 数组...

  • (2)数组相关算法题目

    数组是最简单的数据结构,占据连续内存并且按顺序存储。 以下是与数组有关的算法题目。 (1)查询数组中重复数字 算法...

  • Android高级开发面试题

    一、Java 基础相关 1.1 数据结构与算法 1.1.1 常用的数据结构有哪些? 1.1.2 数组 (1).如何...

  • 数据结构与算法分析:大纲]

    00数据结构与算法分析:大纲01数据结构:数组02数据结构:链表03数据结构:栈03数据结构:队列 本系列课程主要...

  • 数据结构简要

    数据结构与算法 几种常见的数据结构 线性表(数组和链表)、栈、队列和树(二叉树) 一.线性表 1.数组 数组是...

网友评论

    本文标题:【数据结构与算法】数组

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