数据结构
本来这次我安排的主角是数据库,但是我们在上期讲到数据的存取对吧。说到文件里的数据杂乱无章,不能对我们的数据进行存取。所以我们需要用到数据库。那为什么数据库可以呢?想知道答案吗?先了解数据结构。
为什么要了解数据结构
世间万事万物都有结构,比如我们人的身体是由很多细胞结构组成的,我们的房屋是由一砖一瓦组成的,那么数据也有结构吗?嗯嗯,没错,有的,即使没有结构,人们也一定会赋予它结构,以便于管理。
比如我们在手机上导航看地图,某城市或某地点都是用一个黑点来表示。某个城市到某个城市的路线是由黑线描述出来。而我们导航要去往某个地方就是求这些路线的最短路径。而这就用到了一样数据结构——图结构。
还有我们用Java语言写一个项目,项目下是不是有很多文件夹,文件夹下还有文件夹,还有包,再打开,可能还有包或文件夹,打开了好几层最后才打开我们的Java文件。而这用到了另外一样数据结构——树结构。
而我们之后要说的数据库也类似于一个文件夹,不过它下面是存放的一张张表。表就像我们的Excel表格格式一样,每一个表中都可以存储很多数据。请看下图:
在这张表中每一行与每一行都有次序的,那就是它们的序号,是依次递增的且唯一的。如果把每一行看作一个点,它们与他们的上一行和下一行都是有联系的。而这又是一种数据结构——表结构。
其实在我们最开始时学习Java的时候就已经在使用了数据结构,我之前在另外一篇博客提到过栈,那也是一种数据结构,那是一种线性结构,线性结构是一个有序数据元素的集合。有没有想到数组、集合。它们也有它们自己相应的数据结构,正是因为这些数据结构,我们才能那么方便的对他们进行增删改查等操作。否则你看文件,它里面存放的数据就不存在什么数据结构,你必须要对它进行对象序列化,否则你没办法对它进行存取操作。
好了,现在就开始我们数据结构之旅吧。
数据结构的一些术语及概率
在了解之前,我们先来看一些数据结构的专业用语和词汇。
1. 数据
数据是描述可观事物的数值,字符以及所有能输入到计算机中并被计算机程序处理的符号的集合。如:图像、文字、音频等等在屏幕面前展示给我们的任何信息
2. 数据元素
数据元素是数据处理的基本单位,是数据集合的个值,在计算机中通常作为一个整值进行考虑和处理。如果不清楚,可以结合我们学过的Java集合去看数据元素,通常我们的集合都是按一个对象一个对象进行存储的,对吧。所以在Java集合中,一个对象就是一个基本单位。
3. 数据项
一个数据元素是由若干个数据项组成。数据项是数据元素中不可分割的最小单位。我想你应该想到了对象的属性。
4. 数据对象
性质相同的数据元素的集合,它是数据的子集。以一张二维表为例。
学号 | 姓名 | 性别 | 籍贯 | 民族 | 专业 |
---|---|---|---|---|---|
101 | 熊大 | 男 | 湖南 | 土家 | 软工 |
102 | 王二 | 男 | 湖北 | 汉 | 通信 |
103 | 小芳 | 女 | 广东 | 汉 | 电商 |
… | … | … | … | … | … |
这表里的所有数据信息就是我们指的数据对象,每一行的数据信息就是我们指的数据元素,每一个单元格的数据就是我们指的数据项。而我们下次要说的数据库,实际上就是指装这些表的文件夹。
5. 数据结构
结构是指事物之间相互联系或约束,数据结构就是指相互之间存在着某种特定关系的数据元素的集合。因此,数据结构有两个要素:一个是数据元素的集合,另一个是关系的集合。也可分为数据逻辑结构和数据物理结构(数据存储结构)。
6. 抽象数据类型
首先数据类型我们知道,数据类型通常为变量的模型,根据数据类型我们就能够知道该存放什么样的值,范围能够有多大,能够进行哪些运算操作。而抽象数据类型是指一个数字c模型以及定义在该模型上的一组操作。这个数字模型其实就是指数据元素及数据元素间的关系。
7. 数据逻辑结构
逻辑结构就是逻辑上看的结构,就是用数学模型去描述的,一般分为集合、线性、树形、图形四种.
集合
数据元素之间同属于一个集合,没有其它关系。
线性
数据元素之间存在一对一关系。
树形
数据元素之间存在一对多的关系
图形
数据元素之间存在多对多的关系
8. 数据物理结构(存储结构)
物理结构又称为存储结构,指的是在存储器中存放的方式,一般也分为顺序、链式(也叫链接)、索引、散列(也叫哈希)四类。
顺序
顺序存储结构,把逻辑单位上相邻的元素存储在物理位置相邻的存储单位中,可用数组实现。
链式
链式存储结构,对逻辑上相邻的元素不要求其物理位置相邻,用指针来表示数据元素之间的逻辑关系。如C语言的链表、Java语言的LinkedList集合。
索引
在存储所有数据元素信息的同时也建立索引表,通过索引表查找数据元素。所以索引是一种提高查询效率的数据结构。我们经常用到的ArrayList集合就是基于索引(index)的数据结构
散列(也叫哈希)
根据元素的关键字确定元素存储位置的存储方式。有没有想起能存储key-value键对值的HashMap,它们就是这种数据结构。
9.运算
所谓运算,就是对数据和数据结构的处理操作即称运算。以前我们讲过运算符,那些加减删除就是运算,同时那些我们经常说的增删改查等操作也是运算。但是我们又要考虑一个问题,对同一个运算,可能有不同的操作方法。那种方法好,那种方法效率高,这就将拓展到我们算法的领域了。
下一期博客请期待
最近的我稍稍放松了会儿,因为之前忙得喘不过气来。所以博客更新可能会迟到,但绝不会缺席。在这之前,我数据结构这块也很薄弱,但我想真的有必要补起这块知识,因为我们不知不觉就运用到了数据结构,却不自知。我们知道ArrayList集合查找效率高,但是插入、删除等操作效率低。LinkedList集合插入、删除等操作效率高,但查询效率低。现在知道了吧,就是数据结构。好了,谢幕。下一个主角是我们数据结构的配偶——算法。请期待…