数据结构:数组

简介: 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

目录
打赏
0
0
0
0
4
分享
相关文章
|
9月前
|
数据结构之 - 深入了解数组数据结构
数据结构之 - 深入了解数组数据结构
123 6
C 408—《数据结构》算法题基础篇—数组(通俗易懂)
408考研——《数据结构》算法题基础篇之数组。(408算法题的入门)
192 23
探索常见数据结构:数组、链表、栈、队列、树和图
探索常见数据结构:数组、链表、栈、队列、树和图
237 64
在C语言中,数据结构是构建高效程序的基石。本文探讨了数组、链表、栈、队列、树和图等常见数据结构的特点、应用及实现方式
在C语言中,数据结构是构建高效程序的基石。本文探讨了数组、链表、栈、队列、树和图等常见数据结构的特点、应用及实现方式,强调了合理选择数据结构的重要性,并通过案例分析展示了其在实际项目中的应用,旨在帮助读者提升编程能力。
196 5
数据结构实验之C 语言的函数数组指针结构体知识
本实验旨在复习C语言中的函数、数组、指针、结构体与共用体等核心概念,并通过具体编程任务加深理解。任务包括输出100以内所有素数、逆序排列一维数组、查找二维数组中的鞍点、利用指针输出二维数组元素,以及使用结构体和共用体处理教师与学生信息。每个任务不仅强化了基本语法的应用,还涉及到了算法逻辑的设计与优化。实验结果显示,学生能够有效掌握并运用这些知识完成指定任务。
183 4
数据结构与算法学习七:栈、数组模拟栈、单链表模拟栈、栈应用实例 实现 综合计算器
栈的基本概念、应用场景以及如何使用数组和单链表模拟栈,并展示了如何利用栈和中缀表达式实现一个综合计算器。
144 1
数据结构与算法学习七:栈、数组模拟栈、单链表模拟栈、栈应用实例 实现 综合计算器
数据结构与算法学习二、稀疏数组与队列,数组模拟队列,模拟环形队列
这篇文章主要介绍了稀疏数组和队列的概念、应用实例以及如何使用数组模拟队列和环形队列的实现方法。
105 0
数据结构与算法学习二、稀疏数组与队列,数组模拟队列,模拟环形队列
java数据结构,线性表顺序存储(数组)的实现
文章介绍了Java中线性表顺序存储(数组)的实现。线性表是数据结构的一种,它使用数组来实现。文章详细描述了线性表的基本操作,如增加、查找、删除、修改元素,以及其他操作如遍历、清空、求长度等。同时,提供了完整的Java代码实现,包括MyList接口和MyLinearList实现类。通过main函数的测试代码,展示了如何使用这些方法操作线性表。
"揭秘HashMap底层实现:从数组到链表,再到红黑树,掌握高效数据结构的秘密武器!"
【8月更文挑战第21天】HashMap是Java中重要的数据结构,采用数组+链表/红黑树实现,确保高效查询与更新。构造方法初始化数组,默认容量16,负载因子0.75触发扩容。`put`操作通过计算`hashCode`定位元素,利用链表或红黑树处理冲突。`get`和`remove`操作类似地定位并返回或移除元素。JDK 1.8优化了链表转红黑树机制,提升性能。理解这些原理能帮助我们更高效地应用HashMap。
135 0
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等

登录插画

登录以查看您的控制台资源

管理云资源
状态一览
快捷访问