数据结构的基本概念
数据
- 数据(Data)是信息的载体,是描述客观事物属性的数,字符及所有能输入到计算机中并被计算机程序识别和处理的符号的集合。
- 数据不仅仅包括了整形,浮点数等数值类型,还包括了字符甚至声音,视频,图像等非数值的类型。
数据元素
- 数据元素(Data Element) 是数据的基本单位,通常作为一个整体进行考虑和处理。一个数据元素可由若干个数据项组成,数据项是构成数据元素的不可分割的最小单位。例如学生记录就是一个数据元素,它由学号,姓名,性别等数据项组成。
数据对象
- 数据对象(Data Object) 是性质相同的一类数据元素的集合,是数据的一个子集。数据对象可以是有限的,也可以是无限的。例如,整数数据对象是集合N={0,±1,±2 ,······}
数据类型
- 原子类型:其值不可再分的数据类型。
- 结构类型:其值可以再分解为若干成分(分量)的数据类型。
- 抽象数据类型(ADT):抽象数据组织及与之相关的操作。是一个数学模型以及定义在模型上的一组操作。通常是对数据的抽象,定义了数据的取值范围以及对数据操作的集合。
抽象数据类型的特征是实现与操作分离,从而实现封装。
数据结构
- 数据结构是相互之间存在一种或多种特定关系的数据元素的集合。
- 数据结构包括三方面内容:逻辑结构,存储结构(也叫物理结构) 和 数据的运算
数据结构三要素
数据的逻辑结构
-
集合
集合结构中的数据元素之间除“同属一个集合”外,别无其它关系。
-
线性结构
线性结构中的数据元素之间只存在一对一的关系。
-
树形结构
树形结构的元素之间存在一对多的关系。
-
图状结构
也叫网状结构。表示数据元素之间存在多对多的关系。
数据的物理结构
- 存储结构是指数据结构在计算机中的表示(又称为映像)。它包括数据元素的表示和关系的表示。数据的存储结构是用计算机语言实现的逻辑结构,它依赖于计算机语言。
- 数据的存储结构主要有四种:顺序存储;链式存储;索引存储和散列存储。
-
顺序存储
-
把逻辑上相邻的元素存储在物理上也相邻的存储单元中。元素之间的关系由存储单元的邻接关系来体现。
优点:- 实现随机存取。
- 每个元素占用最少的存储空间。
缺点:
- 只能使用相邻的一整块存储单元,因此可能产生较多的外部碎片。
链式存储
-
不要求逻辑上相邻的两个元素在物理位置上也相邻,借助指示元素存储地址的指针来表示元素之间的逻辑关系。
优点:
- 不会出现碎片现象,能充分利用所有的存储空间
缺点:
- 每个元素因存储指针而占用额外的存储空间。
- 只能实现顺序存取。
索引存储
-
在存储元素信息的同时,还建立附加的索引表。索引表中的每项称为索引项。索引项的一般形式是(关键字,地址)。
优点:
- 检索速度快。
缺点:
- 附加的索引表额外占用存储空间。
- 增加和删除数据时也要修改索引表,会花费较多的时间。
散列存储
-
根据元素的关键字直接计算出该元素的存储地址,又称哈希存储。
优点:
- 检索,增加和删除节点的操作都很快。
缺点:
- 若散列函数不好,则可能出现元素存储单元的冲突,而解决冲突会增加时间和空间开销。
数据的运算
施加在数据上的运算包括运算的定义和实现。
- 运算的定义是针对逻辑结构的。指出运算的功能
- 运算的实现是针对存储结构的,指出运算的及具体操作步骤。
算法和算法评价
算法基本概念
算法是对特定问题求解步骤的一种描述,它是指令的有限序列,其中的每条指令表示一个或多个操作。
算法的五个重要特性:
- 有穷性:一个算法必须总在执行有穷步后结束,且每一步都可在有穷时间内完成。
- 确定性:算法中每条指令必须有确切的含义,对于相同的输入只能得出相同的输出。
- 可行性:算法中描述的操作都可以通过已经实现的基本运算执行有限次来实现。
- 输入:一个算法有零个或多个输入。
- 输出:一个算法有一个或多个输出。
通常,设计一个好的算法应考虑以下目标
- 正确性:算法应能够正确的解决求解问题。
- 可读性:算法应去油良好的可读性,以帮助人们理解。
- 健壮性:输入非法数据时,算法能适当地做出反应或进行处理,而不会产生莫名其妙的输出结果。
- 效率与低存储量需求:效率指算法执行的时间,存储量需求指的是算法执行过程中所需要的最大内存空间,这两者都与问题的规模有关。