数据结构:数组

作者: 我是曾经那个少年 | 来源:发表于2018-10-09 22:59 被阅读34次

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

数组

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

关键点:连续的存储空间 --- 就保证了数组可以进行随机访问

1 访问

假如我们声明一个int [] arr = new int[10];

计算机给数组分配一个连续的存储单元,计算机通过地址来访问内存中的数据,假如分配的首地址是base_address

那么第i个元素的访问地址及内存地址就是

a[i] = base_address + i*data_type_size

所以访问的时间复杂度O(1)

image

2:插入和删除

为了保持内存数据的连续性,所以在插入和删除的时候,性能比较低。

如果在第一位插入数据,需要把所有的数据往后移动一位,然后把数据放在第一位。

所以插入的时间复杂度O(n)

如果在第一位删除数据,需要把所有的数据往前移动一位。

所删除入的时间复杂度O(n)

3:编程小技巧

1:插入操作

在第K为插入数据可以把第K位的数据放在最后一位,然后把要插入的数据放在第一位。

2:删除操作

多次操作一次执行,为了避免数据多次移动和搬移,我们每次删除的时候只记录数据已删除,当数组没有存储空间的时候,触发真正的删除操作。eg:JVM标记清除垃圾回收的算法核心思想。

3:数组越界

数组下标越界会导致寻址错误,系统bug。

4:Java中的数组容器类 ArrayList Arrays

优势:支持动态扩容

具体的方法:参考JDK文档手册

5:为什么数组下标从0开始

从0开始寻址:

a[i] = base_address + i*data_type_size

从1开始寻址:

a[i] = base_address + (i-1)*data_type_size

如上两个公式,从1开始比从0开始多一不减法运算。

历史原因:就是C语言是从0开始,后来的高级语言为了学习成本,效仿了C语言。

二位数组寻址 对于m*n的数组

a[i][i] = base_address +(i*n+j) ata_type_size

相关文章

  • 数据结构:数组

    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/fxquaftx.html