1.什么是数据结构
用计算机解决一个具体的问题,需要以下几个步骤:
- 从具体问题抽象出一个适当的数学模型;
- 设计一个解此数学模型的算法;
- 编出程序;
- 进行测试、调整直至得到最终解答。
寻求数学模型的实质:
分析问题,从中提取操作的对象,并找出这些操作对象之间含有的关系,然后用数学的语言加以描述。
很多问题求解最后都转化为求解数学方程或数学方程组。如:求解梁架结构中应力的数学模型为线性方程组。预报人口增长情况的数学模型为微分方程。然而:当计算机进入非数值计算领域,特别是用在管理上的时候,计算机的操作对象之间的关系就无法用数学方程加以描述了。非数值计算问题的数学模型正是本课程要讨论的数据结构。
数据结构是一门研究非数值计算的程序设计问题时处理的操作对象以及它们之间的关系和操作等等的学科。
- 解决数值计算问题的中心: 建立适当的数学模型。
- 解决非数值计算问题的中心: 寻找适当的数据结构
2.数据结构研究的内容
数据结构的讨论一般涉及以下三个方面的内容:
- 数据成员以及它们相互之间的逻辑关系,也称为数据的逻辑结构,简称为数据结构;
- 数据成员及其关系在计算机存储器内的存储表示,也称为数据的物理结构,简称为存储结构;
- 施加于该数据结构上的操作。
3.基本概念和术语
- 数据(Data): 是对信息的一种符号表示。在计算机科学中是指所有能输入到计算机中并被计算机程序处理的符号的总称。数值型+非数值型
- 数据元素(Data Element):是数据的基本单位,在计算机程序中通常作为一个整体进行考虑和处理。一个数据元素可由若干个数据项组成。数据项是数据的不可分割的最小单位。
- 数据对象(Data Object):是性质相同的数据元素的集合,是数据的一个子集。
- 数据结构(Data Structure):是相互之间存在一种或多种特定关系的数据元素的集合。
4.数据的逻辑结构(数据结构)
相互之间存在一种或多种特定关系的数据元素的集合。
4.1.元素(结点)类型:
- 基本数据类型:整型、实型、布尔型……
- 复合数据类型:数组、结构体、类
4.2.结点间的关系——结构
- 集合:数据元素间除“同属于一个集合”外,无其它关系
- 线性结构:一个对一个,如线性表、栈、队列
- 树形结构:一个对多个,如树
- 图状结构:多个对多个,如图
5.数据的物理结构(存储结构)
数据的逻辑结构在计算机中的表示和实现。包含数据元素的表示和关系的表示。
数据元素的表示:通常用位串表示一个数据元素。例,用八位表示一个字符、三十二位表示一个整数
数据元素之间关系的表示
- 顺序存储结构:结点间的逻辑关系由存储单元的邻接关系来体现。通常顺序存储结构是借助于语言的数组来描述的。
- 链式存储结构:不要求逻辑上相邻的结点物理上也相邻,结点间的逻辑关系是由附加的指针字段表示的。
5.1.顺序(sequential)的方法
- 用一块无空隙的存储区域存储数据称为顺序存储
- 顺序存储把一组结点存储在按地址相邻的顺序存储单元里,结点间的逻辑后继关系用存储单元的自然顺序关系来表达
- 顺序存储法为使用整数编码来访问数据结点提供了便利
5.2.链接(linked)的方法
- 利用指针,在结点的存储结构中附加指针字段称为链接法。两个结点的逻辑后继关系可以用指针的指向来表达
- 任意的逻辑关系r,也可以使用这种指针地址来表达。一般的做法是将数据结点分为两部分:
- 一部分存放结点本身的数据,称为数据字段
- 另一部分存放指针,称指针字段,链接到某个后继结点,指向它的存储单元的开始地址。多个相关结点的依次链接就会形成链索
5.3.索引(indexing)的方法
- 索引法是顺序存储法的一种推广,它也使用整数编码来访问数据结点位置
- 索引方法是要建造一个由整数域Z映射到存储地址域D的函数Y:ZD,把结点的整数索引值 z∈Z映射到结点的存储地址d∈D 。它称为索引函数,一般而言它并不象数组那样,是简单的线性函数。
5.4.散列(hashing)的方法
- 散列方法是索引方法的一种延伸和扩展
-
利用一种称为散列函数(hash functions)进行索引值的计算,然后通过索引表求出结点的指针地址
- 对任意的 s∈ S,散列函数 h(s)=z,z∈ Z
6.算法的描述
算法特性
算法设计的要求、衡量算法优劣的标准