https://github.com/jashion/Joy-of-data-structure
(1)数据
数据:可以被计算机理解和处理的描述客观事物的符号集。
几个特征:
- 可以输入计算机
- 可以被计算机处理
- 符号集
比如:整型,字符串等等。都可以满足上面上个条件。 那么?图像,声音算不算数据。答案肯定算,图像,声音这种客观事物,在计算机中转化成二进制来储存,所以,满足上面的条件。
(2)数据的组成结构
数据元素:数据里面具有一定意义的基本单位。
把人类比做数据,那么,数据元素就是人的单独个体。
数据项:数据项是数据不可分割的最小单位。
如果数据元素比做人,那么,数据项可以是组成人的各种器官,眼,鼻,耳,嘴等等,也可以是年龄,性别,姓名等等。
数据对象:性质相同的数据元素的集合,是数据的子集。
性质相同,那就好理解了,比如:兴趣相同的人组成的群体或者90后群体等等。
(3)数据结构
了解到数据其实就是符号集,那么?数据结构是个什么东东?顾名思义,数据结构就是数据的组织形式。类比建筑工程里面的设计结构。
数据结构:数据结构就是数据之间的组织形式。
打个比方:假如你有1000个苹果,你会怎么储存?
一种方案:找一个足够大的储存室,把苹果放在一排
一种方案:100个苹果放一排,总共放10排
一种方案:100个苹果放在底部,上面再叠10层
...
上面N中方案都是处理这个1000个苹果的思路,怎么存放涉及到整个架构的设计,好比数据结构就是解决数据之间的组织结构问题的科学。
数据结构分类
- 逻辑结构:数据对象中的数据元素之间的逻辑关系
集合结构:集合结构中的数据元素除了同属一个集合外,没有其他关系。 线性结构:线性结构中的数据元素之间是一对一的关系。 树形结构:树形结构中的数据元素之间是一对多的关系。 图形结构:图形结构中的数据元素之间是多对多的关系。
- 物理机构:数据的逻辑结构在计算机中的储存形式
顺序储存结构:把数据元素储存在连续的存储单元。 链式储存结构:把数据元素储存在任意的存储单元(可以是连续或者不连续)。
(4)数据类型 VS 抽象数据类型 VS 数据结构
数据类型:是指一组性质相同的值的集合以及定义在此集合伤的一些操作的总称。 C语言数据类型分类:
- 原子类型: 基本类型,比如:整型,字符型等。
- 结构类型: 组合类型,比如:结构体等。
抽象数据类型:是指数据类型的数学抽象模型以及定义在该模型上的一组操作(抽象数据类型不仅仅指已定义并实现的数据类型,还可以是自定义的数据类型。)。
抽象数据类型的格式:
ADT 抽象数据类型名称
Data
数据元素之间的逻辑关系的定义
Operation
操作1
操作2
...
操作N
EndADT
数据类型 VS 抽象数据类型
数据类型是抽象数据类型的逻辑和物理上的具体实现,抽象数据类型则负责定义数据类型上具有普遍性的逻辑关系以及相关的一组操作。比如说:整型,抽象数据类型的整型是指整型具有的普遍特性,比如拥有加减乘除的操作,但是并不涉及到整型在每种语言的具体实现或者不同的操作系统储存不一样等等;涉及到物理上的具体实现则表示为数据类型。类比类和接口。
抽象数据类型 VS 数据结构
抽象数据类型强调的是数据的逻辑性,而数据结构则强调的是数据元素之间的组织形式,其中包括逻辑结构和物理结构。两者并没有所谓的包含关系,但是有交集,可以理解为数据结构已经站在更高的层次统筹数据的合理组织像是,而抽象数据类型还停留在数据层面,比数据类型更高一层,更具有普遍性的抽象。
类比:
数据类型 -> 类
抽象数据类型 -> 接口
数据结构 -> 一个装着类的实例的数组