数据结构:数组

简介: 00数据结构与算法分析:大纲01数据结构:数组02数据结构:链表03数据结构:栈03数据结构:队列数组数组是一种线性表数据结构,它用一组连续的内存空间,来存储一组具有相同类型的数据。

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

数组

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

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

1 访问

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

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

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

a[i] = base_address + i*data_type_size

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

img_5024864db3c7286d0a1d86ee45124559.png
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

目录
相关文章
|
1月前
【数据结构】数组、双链表代码实现
【数据结构】数组、双链表代码实现
|
2月前
|
算法 测试技术 C++
【数据结构】【双堆】【滑动窗口】3013. 将数组分成最小总代价的子数组 II
【数据结构】【双堆】【滑动窗口】3013. 将数组分成最小总代价的子数组 II
|
3月前
|
搜索推荐 算法 测试技术
数据结构排序——计数排序和排序总结(附上912. 排序数组讲解)
数据结构排序——计数排序和排序总结(附上912. 排序数组讲解)
29 0
|
3月前
|
存储 算法 Java
数据结构之数组
数据结构之数组
35 0
|
3月前
|
设计模式 算法 Java
【数据结构和算法】寻找数组的中心下标
给你一个整数数组nums,请计算数组的中心下标。 数组中心下标是数组的一个下标,其左侧所有元素相加的和等于右侧所有元素相加的和。 如果中心下标位于数组最左端,那么左侧数之和视为0,因为在下标的左侧不存在元素。这一点对于中心下标位于数组最右端同样适用。 如果数组有多个中心下标,应该返回最靠近左边的那一个。如果数组不存在中心下标,返回-1。
69 0
|
3月前
|
设计模式 算法 Java
【数据结构和算法】删掉一个元素以后全为 1 的最长子数组
这是力扣的 1493 题,难度为中等,解题方案有很多种,本文讲解我认为最奇妙的一种。又又又是一道滑动窗口的典型例题,可以帮助我们巩固滑动窗口算法。这道题很活灵活现,需要加深对题意的变相理解。给你一个二进制数组nums,你需要从中删掉一个元素。 请你在删掉元素的结果数组中,返回最长的且只包含 1 的非空子数组的长度。 如果不存在这样的子数组,请返回 0 。
64 1
|
4月前
|
设计模式 算法 Java
【数据结构和算法】除自身以外数组的乘积
给你一个整数数组nums,返回数组answer,其中answer[i]等于nums中除nums[i]之外其余各元素的乘积。题目数据保证数组nums之中任意元素的全部前缀元素和后缀的乘积都在32 位整数范围内。请不要使用除法,且在O(n)时间复杂度内完成此题。
38 1
|
25天前
|
存储 算法 Serverless
【软件设计师备考 专题 】数据结构深度解析:从数组到图
【软件设计师备考 专题 】数据结构深度解析:从数组到图
56 0
|
25天前
|
机器学习/深度学习 存储 Java
揭秘数组:数据结构的基石与代码实践解析
揭秘数组:数据结构的基石与代码实践解析
8 0
|
1月前
|
存储 算法
【数据结构与算法】3、虚拟头节点、动态数组的缩容、动态数组和单链表的复杂度、数组的随机访问
【数据结构与算法】3、虚拟头节点、动态数组的缩容、动态数组和单链表的复杂度、数组的随机访问
22 0

热门文章

最新文章