美文网首页
重新认识数组

重新认识数组

作者: PENG先森_晓宇 | 来源:发表于2022-10-19 15:18 被阅读0次

什么是数组

数组是一个连续内存空间,存储相同数据类型的数据结构。

数组优缺点

优点:由于连续的内存空间,且每个元素的数据类型相同,也就是每个元素的字节数相同,所以可以随件访问数组任意元素。计算公式为:a[k]_address = base_address + k * type_size。通过下标查找数组的时间复杂度为T(n) = O(1)。

缺点:不适合插入和删除,有序数组的删除和插入的时间复杂度为T(n) = O(n),无序数组的时间复杂度为T(n) = O(1)。

为什么数组的第一个下标为0

第一个下标为0时,计算数组a的下标为k的元素地址:a[k]_address = base_address + k * type_size

第一个小标为1时,计算数组a的下标为k的元素地址:a[k]_address = base_address + (k-1) * type_size

可以看出如果第一个小标为1时,对于 CPU 来说多了一次减法指令,数组作为非常基础的数据结构,通过下标随机访问数组元素又是其非常基础的编程操作,效率的优化就要尽可能做到极致。所以为了减少一次减法操作,数组选择了从 0 开始编号,而不是从 1 开始。

二维数组在内存中的存储

上面讲了一维数组在内存中的计算公式,而一维数组在内存的数据结构很简单。

比如我们拿一个长度为 10 的 int 类型的数组 int[] a = new int[10]来举例,内存块的首地址为 base_address = 1000。


二维数组的数据结构也很简单,比如设置一个a[4][4]的数组,内存块的首地址为 base_address = 1000。


可以看出二维数组仍然是一个线性表.

二维数组的计算公式:
对于 一个m * n 的数组(i < m,j < n),a[i][j]address = base_address + ( i * n + j) * type_size

总结

推理三维数组,四维数组同样是一个线性表

相关文章

  • 重新认识数组

    什么是数组? 数组(Array)是一种线性表数据结构。它用一组连续的内存空间,来存储一组具有相同类型的数据。 线性...

  • 重新认识数组

    什么是数组数组(Array)是一种线性表数据结构。它用一组连续的内存空间,来存储一组具有相同类型的数据。 线性表(...

  • 重新认识数组

    什么是数组 数组是一个连续内存空间,存储相同数据类型的数据结构。 数组优缺点 优点:由于连续的内存空间,且每个元素...

  • php array merge函数

    HP中合并数组分成两种情况:1.如果这两个数组中有相同的字符串键名 2.如果这两个数组中有相同的数值键名 重新认识...

  • 《认知突围——做复杂时代的明白人 》读书笔记

    作者在书中从"重新认识自己,重新认识知识,重新认识金钱,重新认识时间,重新认识关系,重新认识人生"六个方面进...

  • 重新认识目标

    早上读了小帅老师的文章,里面有提到我们要重新认识的六个方面:重新认识选择、重新认识命运、重新认识改变、重新认识耐心...

  • 15期训练营4组38号小赖第1节课后作业

    建立心智管理时间模型 一、认知突围(从四个维度:重新认识自己,重新认识金钱,重新认识时间,重新认识人生,请从这个方...

  • 第18期训练营欣欣的作业

    一、今晚作业:1.认知突围,从四个维度(重新认识自己,重新认识金钱,重新认识时间,重新认识人生),请从这个方面,阐...

  • 29号

    最近都是重新认识重新认识重新认识、有没有不是重新认识的、自我驱动力、自我约束、自我陶醉、自我安慰、自我保护。唉~~...

  • 第一周的作业,段玉荣

    1:认知突围(从四个维度:重新认识自己,重新认识金钱,重新认识时间,重新认识人生,请从这个方面阐述你应该如何做?)...

网友评论

      本文标题:重新认识数组

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