大话数据结构第一章理解
一、概念
1.1 数据概念
数据:计算机能识别的能运算的符号,各种数据对象的集合——可以简单理解为各种类型的数组的集合。
数据对象:是性质相同的同一类型的数据元素的集合——可以简单理解为任意类型的数组。
数据元素:就是数据对象的元素——可以简单理解为数组的每个元素。
数据项:数据元素的子集,数据项的集合是数据元素——可以简单理解为数组元素的内部成员。
数据项是数据不可分割的最小单位。
数据元素是数据的基本单位。
从数据到数据项就像是个放大镜一样每一层都往里面分割,就像世界是由分子组成,然后分子呢?分子又是由原子组成,然后原子呢?原子又是由电子和原子核等组成,……这样一步一步放大。所以:
数据是数据对象的集合
数据对象是数据元素的集合
数据元素是数据项的集合
例如有如下数组:
人类类型 人类数组名[x] ={人1,人2,人3,……};
畜生类型 畜生数组名[x] ={畜1,畜2,畜3,……};
植物类型 植物数组名[x] ={植物1,植物2,植物3,……};
……
数据就是人类数组+畜生数组+植物数组+……
数据对象就是人类数组/畜生数组/植物数组/……
数据元素就是:人1,人2,人3,……
畜1,畜2,畜3,……
植物1,植物2,植物3,……
数据项就是:人的组成
畜生的组成
植物的组成
1.2 数据结构
数据结构就是数据元素之间的关系。
数据结构分为逻辑结构和物理结构。
所谓结构两字其实就是关系的意思,就像分子结构一样。
1.2.1 逻辑结构
(1)集合结构
平等的结构,各元素都是独立的个体,是为平等的,也就是各自独立、自力更生没有任何关系。比如结构体类型的,其内部的各个元素之间逻辑关系是独立的,其元素可以任意摆放。
(2)线性结构
一对一的关系。
就是说,数据元素A只和数据元素B有关系,然后A和其他元素没有关系。比如数组,链表,只有一个前驱和一个后继。
(3)树形结构
一对多关系。
很像传销的金字塔结构。
(4)图形结构
多对多关系
1.2.3 物理结构
也是存储结构,数据在计算机里的存储方式。
存储结构正确反映数据元素之间的逻辑关系是个重点也是个难点。
因此数据元素的存储关系并不能反映其逻辑关系。
(1)顺序存储结构
连续的数组,线性的数组就是这样存放的,一个挨一个。
(2)链式存储结构
链表就是这样的,存放在不一定是连续的空间里的。比如情报人员的单线连接。
逻辑结构是面对问题的,物理结构是面向计算机的,其基本的目标是将其逻辑关系存储到计算机的内存中。
1.3 数据类型
遐想(可略过):想不明白为什么分类型,能不能让它自己计算开辟的空间,不要管它大小?可惜当时c语言的设计者考虑了这个类型,这一点可以考虑下,为何不能创造出一种语言——一种不用区分数据类型自分配空间大小的程序语言?
c语言中,数据类型分为:
原子类型:不可以再分解的基本类型,包括整型、实型、字符型等。
结构类型:可以再分解的,由若干个类型组合而成的。例如数组,结构体等。
1.4抽象数据类型
抽象是指提取事物的本质特征,保存达到目标的有用信息,其他就剔除掉了。和目标无关的信息都不管的。
抽象数据类型,也就是给你自由,让你独自根据所需创造所需的数据类型。
抽象数据类型告诉你怎么将现实生活中的问题抽象成你自己认为合理的数据类型,把现实问题分解成各个小块,然后抽象成是各个数据项,然后数据元素,数据对象就出来了。以方便解决问题。
第一,把现实问题起一个数据类型名。
第二,将抽象出来的数据元素找到其关系,
第三,将问题分解抽象成各个数据元素或者各个操作,且将各个数据元素分解成各个数据项。
抽象数据类型是一组操作,是指一个数学模型及在模型上定义的一组操作。解决问题的一组操作,方法。