- 1、本文档共14页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
05|数组:为什么很多编程语言中数组都从0开始编号?
05| 0
数组:为什么很多编程语言中数组都从 开始编号?
提到数组,我想你肯定不陌生,甚至还会自信地说,它很简单啊。
是的,在每一种编程语言中,基本都会有数组这种数据类型。不过,它不仅仅是一种编程语言中的数据类型,还是一种最基础的数据结构。尽管数组看起来非常
基础、简单,但是我估计很多人都并没有理解这个基础数据结构的精髓。
在大部分编程语言中,数组都是从0开始编号的,但你是否下意识地想过,为什么数组要从0开始编号,而不是从1开始呢?从1开始不是更符合人类的思维习惯
吗?
你可以带着这个问题来学习接下来的内容。
如何实现随机访问?
什么是数组?我估计你心中已经有了答案。不过,我还是想用专业的话来给你做下解释。数组(Array )是一种线性表数据结构。它用一组连续的内存空间,来存
储一组具有相同类型的数据。
“ ”
这个定义里有几个关键词,理解了这几个关键词,我想你就能彻底掌握数组的概念了。下面就从我的角度分别给你 点拨 一下。
第一是线性表 (Linear List )。顾名思义,线性表就是数据排成像一条线一样的结构。每个线性表上的数据最多只有前和后两个方向。其实除了数组,链表、队
列、栈等也是线性表结构。
file:///F/temp/geektime/数据结构与算法之美/05数组:为什么很多编程语言中数组都从0开始编号?.html[2019/1/15 15:35:15]
05|数组:为什么很多编程语言中数组都从0开始编号?
而与它相对立的概念是非线性表,比如二叉树、堆、图等。之所以叫非线性,是因为,在非线性表中,数据之间并不是简单的前后关系。
file:///F/temp/geektime/数据结构与算法之美/05数组:为什么很多编程语言中数组都从0开始编号?.html[2019/1/15 15:35:15]
05|数组:为什么很多编程语言中数组都从0开始编号?
第二个是连续的内存空间和相同类型的数据。正是因为这两个限制,它才有了一个堪称“杀手锏”的特性:“随机访问”。但有利就有弊,这两个限制也让数组的很多
操作变得非常低效,比如要想在数组中删除、插入一个数据,为了保证连续性,就需要做大量的数据搬移工作。
说到数据的访问,那你知道数组是如何实现根据下标随机访问数组元素的吗?
file:///F/temp/geektime/数据结构与算法之美/05数组:为什么很多编程语言中数组都从0开始编号?.html[2019/1/15 15:35:15]
05|数组:为什么很多编程语言中数组都从0开始编号?
10 int int[] a = new int[10] a[10] 1000 1039
我们拿一个长度为 的 类型的数组 来举例。在我画的这个图中,计算机给数组 ,分配了一块连续内存空间 ~ ,其中,内存块的
首地址为base_address = 1000。
我们知道,计算机会给每个内存单元分配一个地址,计算机通过地址来访问内存中的数据。当计算机需要随机访问数组中的某个元素时,它会首先通过下面的寻
址公式,计算出该元素存储的内存地址:
a[i]_address = base_address + i * data_type_size
data_type_size int data_type_size 4
其中 表示数组中每个元素的大小。我们举的这个例子里,数组中存储的是 类型数据,所以 就为 个字
您可能关注的文档
- 01为什么要学习数据结构和算法?.pdf
- 02如何抓住重点,系统高效地学习数据结构与算法?.pdf
- 03复杂度分析(上):如何分析、统计算法的执行效率和资源消耗?.pdf
- 04复杂度分析(下):浅析最好、最坏、平均、均摊时间复杂度.pdf
- 06链表(上):如何实现LRU缓存淘汰算法.pdf
- 07链表(下):如何轻松写出正确的链表代码?.pdf
- 08栈:如何实现浏览器的前进和后退功能?.pdf
- 11排序(上):为什么插入排序比冒泡排序更受欢迎?.pdf
- 09队列:队列在线程池等有限资源池中的应用.pdf
- 10递归:如何用三行代码找到“最终推荐人”?.pdf
- 2024-2025学年培养自我效能感的小学心理教育设计.docx
- 鲁教版美术一年级下册 第5课《有趣的半圆形》 教学设计.docx
- 2024-2025学年学校环境与霸凌行为的联系教学设计.docx
- 2024-2025学年培养小学生时间管理能力的教学设计.docx
- 4.12依法生产经营,保护环境(教学设计)-《职业道德与法律》同步教学(高教版).docx
- (中职) 网店客服(第二版)教案8-1同步教学教案.docx
- 2024-2025学年培养小学生自我调节能力的德育设计.docx
- 2024-2025学年小学安全教育教学设计的多媒体运用.docx
- 2024-2025学年小学安全教育观念教学设计总结.docx
- 人教版七年级音乐上册(简谱)第2单元 《歌唱祖国》教学设计.docx
文档评论(0)