美文网首页
《数据结构与算法之美》03——数组

《数据结构与算法之美》03——数组

作者: 大杂草 | 来源:发表于2020-07-21 17:25 被阅读0次

概念

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

关键词:

1.线性表(Linear List),线性表就是数据排成像一条线一样的结构。

线性表

相对的是,非线性表。

非线性表

2.连续的内存空间和相同类型的数据。

有这两个限制,有一个特性:“随机访问”。通过内存空间地址来获取数组元素。

警惕数组的访问越界问题

以C语言为例,只要不是访问受限的内存,所有的内存空间都是可以自由访问的。
以Java、C#为例,数组越界时会抛出异常。

容器能否完全替换数组

以Java的ArrayLisit为例(同比C#的List),最大的优势是可以将很多数组操作的细节封装起来,并且支持动态扩容。

注意:动态扩容涉及内存申请和数据搬移,如果事先能确定需要存储的数据大小,最好在创建时就指定数据大小。

相比于容器,数组是否无用武之地?

  1. Java的ArrayList无法存储基本类型,会涉及到Autoboxing、Unboxing,对性能有一定的消耗,如果关注性能,选择数组。
  2. 如果数据大小已知,并且对数据的操作非常简单,可直接使用数组。
  3. 表示多维数组时,用数组往往会更加直观。

但对于业务开发,直接使用容器就足够了,省时省力。

课后思考

1.前面我基于数组的原理引出JVM的标记清除垃圾回收算法的核心理念。我不知道你是否使用Java语言,理解JVM,如果你熟悉,可以在评论区回顾下你理解的标记清除垃圾回收算法。

使用的是C#,一样有GC。

有两个阶段:

  • 阶段1:Mark-Sweep标记清除阶段
  • 阶段2:Compact压缩阶段
垃圾回收流程

参考资料:https://kb.cnblogs.com/page/106720/

2.前面我们讲到一维数组的内存寻址公式,那你可以思考一下,类比一下,二维数组的内存寻址公式是怎样的呢?

a[i][j]_address = base_address + (i * col_count + j) * data_type_size

相关文章

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

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

  • 数据结构:数组

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

  • 数据结构与算法

    数据结构与算法之美 数据结构与算法之美1--如何学数据结构与算法之美2--复杂度分析(上)数据结构与算法之美3--...

  • 算法的复杂度分析

    本文是对极客时间《数据结构与算法之美》03-04 节课关于算法复杂度分析的小结。 前面:为什么要学习数据结构与算法...

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

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

  • 数据结构与算法之美 复杂度分析上

    [数据结构与算法之美:如何分析、统计算法的执行效率和资源消耗?(03)] 一、如何分析、统计算法的执行效率和资源消...

  • 01.数据结构之数组篇

    文章为极客时间《数据结构与算法之美》的学习笔记。 什么是数组? 数组是一种线性表数据结构。它用一组连续的内存空间,...

  • 《数据结构与算法之美》03——数组

    概念 数组(Array)是一种线性表数据结构。它用一组连续的内存空间,来存储一组具有相同类型的数据。 关键词: 1...

  • 数据结构与算法之美-35讲Trie树

    数据结构与算法之美-35讲Trie树 特别备注 本系列非原创,文章原文摘自极客时间-数据结构算法之美[https:...

  • 数据结构与算法之美(二):数组

    本章内容源于笔者对极客时间《数据结构与算法之美》以下章节的学习笔记: 数组:为什么很多编程语言中数组都从0开始编号...

网友评论

      本文标题:《数据结构与算法之美》03——数组

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