今天不学习,明天变垃圾
数据结构是什么?为什么需要数据结构?
开始正文之前,先给大家讲个笑话。
某一天早晨,老板给小张一个产品检测仪,让他从一堆产品中把少量不合格的产品挑出来,小张撸起袖子就打算拿起产品一个个测试。这时候旁边老王看不下去了,他一把推开小张,把这堆产品分成两份,把其中一份拿去检测,检测到这一份中有产品不合格,又把这一份分成两份接着测,如此循环下去,不到一会时间,就把不合格产品全部找出来了。这时候老板出来拍了拍老王肩膀,老王一脸骄傲的看着小张,仿佛再说你小子O(n)和O(logn)都分不清。于是过了不久老王就升职了…
数据结构简单来讲又分为数据和结构。下面我们来详细讲解一下这两个概念。
- 数据。 数据又称数据对象,是多种有相同关系的属性集合。比如下图书本这个数据对象,它有书名、价格、出版社等属性,并且其共同关系就是书本。
- 结构。 结构一般分为逻辑结构和物理结构。
- 逻辑结构又分为集合结构、线性结构、树状结构、图状结构等。
- 物理结构分为顺序存储结构和链式存储结构。
- 逻辑结构又分为集合结构、线性结构、树状结构、图状结构等。
最基本的数据结构 -----数组
数组是一系列有序数据的集合,它是一种数据长度固定,且内存空间连续的存储结构(大家可以猜猜数组的逻辑结构和物理结构分别是什么^^)。数组在创建时必须声明数组长度,接下来就会在内存中给它分配长度固定且连续的存储单元。
上面简单的介绍一下数组基本概念,接下来分析一下数组的增删改查。
- 增。 数组是一种数据长度固定的存储结构,因此数组并没有增加数据的功能,如果真的需要给数组增加数据,只能创建一个新的数组,新的数组长度要比旧数组长度要长,接着通过
System.arraycopy();
的方式把旧数组复制到新数组中,再添加新数据。如果要添加数据的下标大于或等于数组长度,就会报数组越界。
- 删。 数组是一种数据长度固定的存储结构,因此数组并不存在删除操作。如果需要用数组做删除操作,必须通过使用
System.arraycopy();
的方式去复制数据。 - 改。 数组声明后,可以根据下标重新赋值,如下图所示。需要注意的是,数组声明后,内存中保存的是没有实际意义的默认值。
- 查。 数组是一系列有序数据的集合,支持随机存取,读取效率极高。
数组的优缺点分析
- 数组的优点
- 有序的,支持随机存取。
- 存取效率极高。
- 数组的缺点
- 数组长度固定,不能动态增长。
- 没有真正意义上的增删操作。如果要实现增删功能,需要大量arraycopy 操作,效率极其低下。
- 内存利用率低。数组声明后,将会给它分配连续固定大小的内存,其中允许保存空数据,造成内存利用率低。
为了解决数组内存利用率低的问题,科学家们提出了线性表的概念。下一篇文章中为大家详细讲解…