美文网首页
数据结构-数组

数据结构-数组

作者: 石头剪刀布_700f | 来源:发表于2019-03-21 19:02 被阅读0次

什么是数组?

数组是线性表的一种结构。它使用一段连续的内存空间,存储相同类型的数据

特点

数组最明显的特点:

  • 随机访问

低效的插入和删除
为了保证内存数据的连续性,插入和删除操作都需要移动插入或删除位置数据之后的数据,以保证操作后的数据具有连续性,同时也使得查找数组中的某个元素变得很高效。

高效的查找数组中某个位置的数据

//计算数组第i个数据的内存地址
a[i]_address = base_address + i * data_type_size

分析要严谨

对于一群无序的数据(数据既然无序,那么按照顺序一个一个往后挪就没有意义了,直接替换目标位置的数据到末尾即可),我们在插入时只需要将固定位置的数据换到最后即可。此时的时间复杂度为O(1)。

x插入到第3个位置.png

下面我要删除有序数组中的几个元素:
假设我们要删除某个数组中的3个元素,那我们需要挪动3次数据,每次挪动数据的时间复杂度为O(n)(这里考虑的是平均时间复杂度)。如果每次删除的时候,我们并不是立刻删除,而是将要删除的数据的位置记录下来,等到一定数量之后一起删除,那么我们在挪动数据的时候就只需要挪动1次数据。时间是原来的1/3.

  • 这也是JVM标记清除垃圾回收算法的核心。


    删除3个元素.png

为什么数组的下标是从0开始的?

我们可以从两方面开始分析:时间,空间

  • 时间
    如果从0开始,在计算第k个元素的时候计算如下:
a[k]_address = base_address + k * type_size

如果从1开始,在计算第k个元素的时候计算如下:

a[k]_address = base_address + (k-1)*type_size

很明显,计算第k个元素,从1开始比从0开始多一步-1操作,对于cpu来说就是一次减法指令。

  • 空间
    我们都知道计算机的计数方式是二进制,那就必定存在0号位置。
    0-7(十进制)可以由000-111(二进制)表示;
    1-8(十进制)需要由001-1000(二进制表示);
    既然有000可以表示一位数,为什么不用呢?

相关文章

  • 数据结构:数组

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

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

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

  • 关于HashMap,这篇文章已经总结很详细了

    HashMap的底层数据结构? HashMap 是我们非常常用的数据结构,由 数组和链表组合构成 的数据结构。数组...

  • 剑指offer阅读(一)

    数据结构 面试题二: 数组 数组是一种最简单的数据结构,占据一块连续的数据结构并按照顺序存储数据。创建数组时,我们...

  • HashMap原理基础

    数据结构分析 数据结构:数组+链表(或红黑树) 数组:Entry implements Map.Entr...

  • Kotlin数据容器(1)✔️数组

    对象数组基本数据类型数组   数据容器是基于某种数据结构的,常见的数据结构有数组 (Array)、集 (Set)、...

  • ArrayList、LinkedList、Vector的区别

    1.从存储数据结构分析 ArrayList:数组 Vector:数组 LinkedList:双向链表数组:(数组属...

  • ArrayList和LinkedList——数组VS链表

    一、数据结构 1.1 数组 ArrayList是一种数组类型的数据结构,数组是内存中一段地址连续的空间。 我们使用...

  • ConcurrentHashMap 1.7和1.8的区别

    一、1.7中数据结构 Segment数组 + HashEntry数组 + Reentrantlock Segmen...

  • 11.11

    今天把数组方面的数据结构题目刷了10多道。 明日计划: 学完数组方面的数据结构题目 学习单链表的数据结构题目

网友评论

      本文标题:数据结构-数组

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