待处理的数据以及数据之间的关系
数据元素之间一种或多种特定关系的集合
一开始计算机是计算数值用的,所以当人们使用计算机解决实际问题的时候,首先需要从具体问题中抽象出一个适当的数据模型,为了解这个设计模型,需要设计算法,最后才是实现解决该问题的程序,从而得到一个可用的程序。
但是现实生活中,不仅仅是处理数值上的问题,更多的是用程序来做排队取票、复杂计算器的设计、超大整数的求和等等问题,所以更需要有堆、栈、树、表等数据结构的帮助。
因此数据结构研究的是非数值计算的程序设计问题中的操作对象,以及它们之间的关系和操作等相关问题。
数据
描述客观事物
计算机中可以操作
能被计算机识别
数据是能够输入给计算机处理的符合集合
数据元素
组成数据的,有一定意义的基本单位,在计算机通常作为整体处理,通常也被称为记录。
水果中的苹果,梨,香蕉;猫和狗是宠物类的数据元素
数据项
一个数据元素可以由若干个数据项组成
数据项是数据不可再分的最小单位。
针对苹果这个数据元素,可以有大小,颜色这些数据项;
针对猫这个数据元素,可以有尾巴,足,嘴巴,鼻子,耳朵等数据项。
数据对象
是性质相同的数据元素的集合,是数据的子集。
性质相同指的是数据元素具有相同数据和类型的数据项
苹果都有大小和颜色等相同的数据项。
针对上述概念,对数据结构下一个定义
数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。
排队,可以理解为先到的人先取餐。
这包含了逻辑上的关系和物理上的关系
逻辑结构指的是数据对象中数据元素之间的相互关系
集合结构
类似于数学中的集合,数据元素之间没有别的关系,只是同属一个集合。
线性结构
数据元素是一对一的关系
树形结构
数据元素是一对多的关系
图形结构
数据元素是多对多的关系
物理结构是指数据的逻辑结构在计算机中的存储形式,如何存储数据元素之间的逻辑关系,是实现物理结构的重点和难点。
顺序存储结构
将数据元素存放到地址连续的存储单元里面,其数据间的逻辑关系和物理关系是一致的。顺序存储结构类似于排队,两两之间是十分靠近的。
链式存储结构
将数据元素放到任意的存储单元里面,这组单元可以连续也可以不连续。
链式存储结构类似于银行叫号,人可以站在任何一个地方,只需要关注自己的上一个人就行了。
数据类型指的是一些值的集合以及针对该集合的一些操作的总称,这些值要求性质相同。
如1,2,3,45,3435,3443这些都是整数,可以称之为整型。
抽象数据类型又分为原子类型和结构类型,原子类型指的是不可再分解的基本类型。结构类型是由若干个类型组合而成,是可以再分解的。
抽象指的是抽取出事物具有的普遍性的本质,抽出问题的特征而忽略细节。
抽象数据类型是指一个数学模型及定义在这个模型上的一组操作。
比如一个点,在空间直角坐标系中存在x,y,z坐标,我们可以把点抽象出来,做成一个数据类型。
抽象数据类型,抽象类的区别
抽象数据类型(Abstract Data Type,ADT)是计算机科学中具有类似行为的特定类别的数据结构的数学模型;或者具有类似语义的一种或多种程序设计语言的数据类型。抽象数据类型是描述数据结构的一种理论工具,其目的是使人们能够独立于程序的实现细节来理解数据结构的特性。抽象数据类型的定义取决于它的一组逻辑特性,而与计算机内部如何表示无关。
抽象类往往用来表征对问题领域进行分析、设计中得出的抽象概念,是对一系列看上去不同,但是本质上相同的具体概念的抽象。
通常在编程语句中用 abstract 修饰的类是抽象类。在C++中,含有纯虚拟函数的类称为抽象类,它不能生成对象;在java中,含有抽象方法的类称为抽象类,同样不能生成对象。
抽象类是不完整的,它只能用作基类。在面向对象方法中,抽象类主要用来进行类型隐藏和充当全局变量的角色。