day04数据结构与算法之美(为什么很多编程语言中数组都是从0开始编号)

一、解答
计算机随机访问数组元素的寻址公式:
a[i]_address=base_address+i*data_type_size
其中 a[i]_address代表数组下标为i的元素的地址,base_address代表数组的首地址,i代表数组下标,data_type_address代表数组元素的类型大小。
我们可以做出如下假设:
①数组元素从1开始:那么我们寻址公式与之对应就是a[i]_address=base_address+(i-1)data_type_size
②数组元素从0开始:那么我们寻址公式与之对应就是a[i]_address=base_address+i
data_type_size
两者一对比,我们就可以知道原因了,①比②多了一次减法运算。还有一个原因就是历史原因
二、数组
①数组是一种线性表数据结构。它是用一组连续的内存空间,来存储一组具有相同类型的数据
低效的“插入”和“删除”。(其需要大量的搬运数据)
③警惕数组的访问越界问题
三、链表和数组的区别
链表适合插入、删除操作,时间复杂度为O(1);数组支持随机访问,时间复杂度为O(1)。
四、容器
以ArrayList为例,其将数组操作的很多细节封装了起来,且支持动态扩容,但由于扩容的操作涉及一些内存的申请和数组的搬移,比较耗时间,所以最好在创建ArrayList的时候指定数据大小。
五、ArrayList与数组的适用时机
存储基本数据用数组,多维数组时用数据比较直观。
业务开发:适用容器,省时省力。
底层开发:使用数组。

六、线性表与非线性表
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值