深入理解基本数据结构:数组详解

引言

在计算机科学中,数据结构是存储、组织和管理数据的方式。数组作为最基础的数据结构之一,广泛应用于各种编程场景。在这篇博客中,我们将详细探讨数组的定义、特点、操作及其在不同编程语言中的实现。


什么是数组?

数组是一种线性数据结构,用于存储一组相同类型的元素。数组中的元素在内存中是连续存储的,可以通过索引快速访问。

数组的特点

  1. 固定大小:数组的大小在创建时确定,不能动态调整。
  2. 相同类型:数组中的所有元素必须是相同的数据类型。
  3. 连续存储:数组中的元素在内存中是连续存储的。
  4. 随机访问:可以通过索引快速访问任意位置的元素。

数组的基本操作

创建数组

Java中创建数组
public class ArrayExample {public static void main(String[] args) {// 创建一个包含5个整数的数组int[] arr = new int[5];// 使用数组初始化器创建并初始化数组int[] arr2 = {1, 2, 3, 4, 5};// 输出数组元素for (int i = 0; i < arr2.length; i++) {System.out.println("arr2[" + i + "] = " + arr2[i]);}}
}

访问数组元素

Java中访问数组元素
public class AccessArray {public static void main(String[] args) {int[] arr = {10, 20, 30, 40, 50};// 访问并输出数组的第三个元素System.out.println("第三个元素是: " + arr[2]);// 修改数组的第三个元素arr[2] = 35;System.out.println("修改后的第三个元素是: " + arr[2]);}
}

数组的遍历

Java中遍历数组
public class TraverseArray {public static void main(String[] args) {int[] arr = {5, 10, 15, 20, 25};// 使用for循环遍历数组for (int i = 0; i < arr.length; i++) {System.out.println("元素 " + i + " 的值是: " + arr[i]);}// 使用增强for循环遍历数组for (int element : arr) {System.out.println("元素的值是: " + element);}}
}

数组的常见操作

  1. 查找:在数组中查找特定元素的位置。
  2. 插入:在数组的指定位置插入新元素。
  3. 删除:从数组中删除指定位置的元素。
  4. 排序:对数组中的元素进行排序。
Java中的数组操作示例
import java.util.Arrays;public class ArrayOperations {public static void main(String[] args) {int[] arr = {3, 1, 4, 1, 5, 9, 2, 6, 5};// 查找元素int index = Arrays.binarySearch(arr, 4);System.out.println("元素 4 的位置是: " + index);// 插入元素 (在Java中直接使用数组不能动态插入,只能创建新数组)int[] newArr = new int[arr.length + 1];System.arraycopy(arr, 0, newArr, 0, arr.length);newArr[arr.length] = 7;System.out.println("插入新元素后的数组: " + Arrays.toString(newArr));// 删除元素 (在Java中直接使用数组不能动态删除,只能创建新数组)int[] smallerArr = new int[arr.length - 1];System.arraycopy(arr, 0, smallerArr, 0, 3);System.arraycopy(arr, 4, smallerArr, 3, arr.length - 4);System.out.println("删除元素后的数组: " + Arrays.toString(smallerArr));// 排序数组Arrays.sort(arr);System.out.println("排序后的数组: " + Arrays.toString(arr));}
}

数组在不同编程语言中的实现

Python中的数组

在Python中,数组可以通过列表(List)来实现。Python的列表与数组非常相似,但具有动态调整大小的能力。

# 创建和初始化数组
arr = [1, 2, 3, 4, 5]# 访问数组元素
print("第三个元素是:", arr[2])# 修改数组元素
arr[2] = 35
print("修改后的第三个元素是:", arr[2])# 遍历数组
for i in range(len(arr)):print("元素", i, "的值是:", arr[i])# 增强for循环遍历数组
for element in arr:print("元素的值是:", element)# 插入元素
arr.append(6)
print("插入新元素后的数组:", arr)# 删除元素
arr.pop(2)
print("删除元素后的数组:", arr)# 排序数组
arr.sort()
print("排序后的数组:", arr)
JavaScript中的数组

在JavaScript中,数组是动态大小的,可以直接插入和删除元素。

// 创建和初始化数组
let arr = [1, 2, 3, 4, 5];// 访问数组元素
console.log("第三个元素是:", arr[2]);// 修改数组元素
arr[2] = 35;
console.log("修改后的第三个元素是:", arr[2]);// 遍历数组
for (let i = 0; i < arr.length; i++) {console.log("元素", i, "的值是:", arr[i]);
}// 增强for循环遍历数组
for (let element of arr) {console.log("元素的值是:", element);
}// 插入元素
arr.push(6);
console.log("插入新元素后的数组:", arr);// 删除元素
arr.splice(2, 1);
console.log("删除元素后的数组:", arr);// 排序数组
arr.sort((a, b) => a - b);
console.log("排序后的数组:", arr);

图解:数组的基本操作

创建和初始化数组
创建数组
初始化大小
分配内存
填充默认值
数组创建完成
访问数组元素
访问数组元素
通过索引访问
获取元素值
返回值
数组遍历
遍历数组
使用for循环
访问每个元素
输出元素值
插入和删除操作
插入元素
创建新数组
复制原数组元素
在指定位置插入新元素
新数组完成
删除元素
创建新数组
复制原数组元素
跳过要删除的元素
新数组完成

总结

数组作为最基础的数据结构之一,具有固定大小相同类型连续存储随机访问的特点。通过对数组的基本操作和实现的学习,我们可以更好地理解和使用数组。在实际编程中,数组的应用广泛且高效,是每个程序员都必须掌握的基础知识。


参考资料

  1. Java Array Documentation
  2. Python List Documentation
  3. JavaScript Array Documentation

希望这篇博客能帮助你更好地理解数组。如果你喜欢这篇文章,请给我点赞,并点击关注,以便第一时间获取更多优质内容!谢谢你的支持!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/42676.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

原生android的内存性能提升方面的方案大致设计

一 测试目标&#xff1a; 以满足用户设备的内存性能和不杀后台为目标。 1&#xff1a;满足用户设备的内存性能是指不出现因为内存原因导致的安卓设备死机&#xff0c;卡顿等问题。 2&#xff1a;满足不杀后台是指整个设备使用时&#xff0c;不出现后台app被杀。 通常是估算如果…

构造函数注入@RequiredArgsConstructor

Api(tags "用户管理接口") RequiredArgsConstructor RestController RequestMapping("users") public class UserController {private final IUserService userService;PostMappingApiOperation("新增用户")public void saveUser(RequestBody U…

输入框输入值之后,检索表格中是否存在输入框中的值,存在就让当前文字为红色

this.searchValue为输入框的值 createKeywordHtml_content(data) { if (data undefined) { return data; } if (typeof data ! string) { data String(data) } let value data.replace(this.searchValue, <span style"color:#FF5555">$&</span>…

来一组爱胜品1133DN PRO打印机的照片

刚拆箱的机器正面照片 打开前盖正准备要安装原装耗材 下图是原装耗材&#xff0c;硒鼓型号是DR2833、碳粉盒型号是TN2833,鼓组件打印页数12000页&#xff0c;TN2833标准容量粉盒打印页数1600页/5%覆盖率&#xff0c;TN2833H大容量粉盒打印页数3000页/5%覆盖率、TN2833L超大容量…

Intel base instruction -- cvttsd2si

将截断双精度浮点数并转换为有符号整数。 4958: 8b 05 82 49 00 00 mov 0x4982(%rip),%eax # 92e0 <age_to_colorBase> // eaxgvar_92e0 495e: 48 8d 15 7b 49 00 00 lea 0x497b(%rip),%rdx # 92e0 <age_to_colorBase&g…

慢性肾脏病-MR+转录组文献

Identification of novel therapeutic targets for chronic kidney disease and kidney function by integrating multi-omics proteome with transcriptome - PMC (nih.gov) 数据和材料 Our pQTL summary data were acquired from previously published studies and can be f…

三. 根文件系统构建

根文件系统构建好以后就意味着我们已经拥有了一个完整的,可以运行的最小系统. 一. 根文件系统简介 根文件系统一般也叫做 rootfs&#xff0c;那么什么叫根文件系统&#xff1f;Linux 中的根文件系统更像是一个文件夹或者叫做目录,在这个目录里面会有很多的子目录,目录下的文件…

《妃梦千年》第二十九章:朝中波澜

第二十九章&#xff1a;朝中波澜 自从被封为护国夫人后&#xff0c;林清婉在大周的地位愈发稳固&#xff0c;她的智慧和勇气不仅赢得了皇上的信任&#xff0c;也获得了朝中众臣的敬佩。然而&#xff0c;这也引来了部分人的嫉妒和不满&#xff0c;他们开始在暗中谋划&#xff0…

AdaBoost集成学习算法理论解读以及公式为什么这么设计?

本文致力于阐述AdaBoost基本步骤涉及的每一个公式和公式为什么这么设计。 AdaBoost集成学习算法基本上遵从Boosting集成学习思想&#xff0c;通过不断迭代更新训练样本集的样本权重分布获得一组性能互补的弱学习器&#xff0c;然后通过加权投票等方式将这些弱学习器集成起来得到…

RightFont 8.7.0 Mac专业字体管理工具

RightFont 适用于 macOS 的终极字体管理器应用程序&#xff0c;提供无缝的字体管理体验。它结合了速度、直观的功能和专业的功能&#xff0c;使用户能够轻松预览、安装、组织和共享字体。 RightFont 8.7.0 Mac下载 RightFont 8.0的新增功能 RightFont 8.0 带来了全新的智能选…

【电脑应用技巧】如何寻找电脑应用的安装包华为电脑、平板和手机资源交换

电脑的初学者可能会直接用【百度】搜索电脑应用程序的安装包&#xff0c;但是这样找到的电脑应用程序安装包经常会被加入木马或者强制捆绑一些不需要的应用装入电脑。 今天告诉大家一个得到干净电脑应用程序安装包的方法&#xff0c;就是用【联想的应用商店】。联想电脑我是一点…

比赛获奖的武林秘籍:05 电子计算机类比赛国奖队伍技术如何分工和学习内容

比赛获奖的武林秘籍&#xff1a;05 电子计算机类比赛国奖队伍技术如何分工和学习内容 摘要 本文主要介绍了在电子计算机类比赛中技术层面上的团队分工和需要学习的内容&#xff0c;分为了嵌入式硬件、嵌入式软件、视觉图像处理、机械、上位机软件开发和数据分析等六个方向&am…

文心一言 VS 讯飞星火 VS chatgpt (299)-- 算法导论22.1 3题

三、有向图 G ( V , E ) G(V,E) G(V,E) 的转置是图 G T ( V , E T ) G^{T} (V,E^{T}) GT(V,ET)&#xff0c;这里 E T { ( v , u ) ∈ V V E^{T} \{(v,u)∈ V \times V ET{(v,u)∈VV:(u,v)∈ E}$因此&#xff0c;图 G T G^{T} GT 就是将有向图 G G G中所有边的方向反过来…

java LogUtil输出日志打日志的class文件内具体方法和行号

最近琢磨怎么把日志打的更清晰&#xff0c;方便查找问题&#xff0c;又不需要在每个class内都创建Logger对象&#xff0c;还带上不同的颜色做区分&#xff0c;简直不要太爽。利用堆栈的方向顺序拿到日志的class问题。看效果&#xff0c;直接上代码。 1、demo test 2、输出效果…

【WebGIS平台】传统聚落建筑科普数字化建模平台

基于上述概括出建筑单体的特征部件&#xff0c;本文利用互联网、三维建模和地理信息等技术设计了基于浏览器/服务器&#xff08;B/S&#xff09;的传统聚落建筑科普数字化平台。该平台不仅实现了对传统聚落建筑风貌从基础到复杂的数字化再现&#xff0c;允许用户轻松在线构建从…

Linux 利用命名空间创建一个自己的“容器“

Linux 利用命名空间创建一个自己的"容器" 前置条件 创建一个目录存放容器mkdir /myapp准备静态编译busybox&#xff0c;操作系统自带的往往是依赖动态库的(本文使用的debian apt install busybox-static) 开始 使用unshare起一个独立命名空间.# 进入后/myapp目录…

Python中生成随机数:一种简单而强大的方法

简介&#xff1a; 在编程中&#xff0c;我们经常需要生成随机数来模拟各种情况&#xff0c;比如游戏、统计模拟、机器学习数据集的划分等。Python通过其内置的random模块提供了一个简单而强大的方式来生成随机数。本文将介绍如何使用random模块来生成各种类型的随机数&#xff…

【RESTful】前后端的通信方式 REST

前后端的通信方式 REST 1.初识 REST1.1 什么是 REST1.2 REST 的特征 2.HTTP 方法与 CRUD 动作映射3.实现 REST 风格的 CRUD 1.初识 REST 1.1 什么是 REST REST 是软件架构的规范体系结构&#xff0c;它将 资源的状态 以适合客户端的形式从服务器端发送到客户端&#xff08;或…

小型简易GIT服务器搭建和使用

搭建GIT服务器的文章有很多&#xff0c;多数在管理的时候都使用了gitosis作为管理工具&#xff0c;但是作为一个小团队(人数少于50人)&#xff0c;我觉得完全可以使用公钥验证的方式&#xff0c;这样会简单不少&#xff0c;下面来看看简易的搭建方法吧。 服务器版本:ubuntu 16…

Unix\Linux 执行shell报错:“$‘\r‘: 未找到命令” 解决

linux执行脚本sh xxx.sh报错&#xff1a;$xxx\r: 未找到命令 原因&#xff1a;shell脚本在Windows编写导致的换行问题&#xff1a; Windows 的换行符号为 CRLF&#xff08;\r\n&#xff09;&#xff0c;而 Unix\Linux 为 LF&#xff08;\n&#xff09;。 缩写全称ASCII转义说…