绪论简摘
数据结构及分类
数据结构包括逻辑结构与物理结构
逻辑结构是对数据元素之间逻辑关系(如前驱后继关系)的描述
物理结构是逻辑结构在计算机中的表示或实现,又称存储结构
数据元素及其关系在计算机存储器内的表示,称为数据的存储结构(Storage Structure);
数据的存储结构是逻辑结构用计算机语言的实现(亦称为映象),它依赖于计算机语言。对机器语言而言,存储结构是具体的。一般,只在高级语言的层次上讨论存储结构。
数据的存储结构有如下四种:
a) 顺序存储方法
该方法把逻辑上相邻的结点存储在物理位置上相邻的存储单元里,结点间的逻辑关系由存储单元的邻接关系来体现。
由此得到的存储表示称为顺序存储结构 (Sequential Storage Structure),通常借助程序语言的数组描述。
该方法主要应用于线性的数据结构。非线性的数据结构也可通过某种线性化的方法实现顺序存储。
b) 链接存储方法
该方法不要求逻辑上相邻的结点在物理位置上亦相邻,结点间的逻辑关系由附加的指针字段表示。由此得到的存储表示称为链式存储结构(Linked Storage Structure),通常借助于程序语言的指针类型描述。
c) 索引存储方法
该方法通常在储存结点信息的同时,还建立附加的索引表。
索引表由若干索引项组成。若每个结点在索引表中都有一个索引项,则该索引表称之为稠密索引(Dense Index)。若一组结点在索引表中只对应一个索引项,则该索引表称为稀疏索引(Spare Index)。索引项的一般形式是:
(关键字、地址)
d) 散列存储方法
该方法的基本思想是:根据结点的关键字直接计算出该结点的存储地址。
四种基本存储方法,既可单独使用,也可组合起来对数据结构进行存储映像。
同一逻辑结构采用不同的存储方法,可以得到不同的存储结构。选择何种存储结构 表示相应的逻辑结构,视具体要求而定,主要考虑运算方便及算法的时空要求
数据类型和抽象数据类型
算法+数据结构=程序
数据类型:
1)基本类型,整型、实型、字符型等(取值范围和允许的操作都是预先规定)
2)组和类型,由一些基本类型组合构造而成,如记录、数组、结构等
抽象数据类型:
简称ADT,一个数学模型及定义在该模型上的一组操作
ADT ADT-Name{
Data://数据说明
数据元素之间逻辑关系的描述
Operations://操作说明
Operation1://操作1,它通常可用C或C﹢﹢的函数原型来描述
Input:对输入数据的说明
Preconditions:执行本操作前系统应满足的状态//可看作初始条件
Process:对数据执行的操作
Output:对返回数据的说明
Postconditions:执行本操作后系统的状态//"系统"可看作某个数据结构
Operation2://操作2
……
}//ADT
抽象数据类型可以看作是描述问题的模型,它独立于具体实现。它的优点是将数据和操作封装在一起,使得用户程序只能通过在ADT里定义的某些操作来访问其中的数据,从而实现了信息隐藏。在C﹢﹢中,我们可以用类(包括模板类)的说明来表示ADT,用类的实现来实现ADT。因此,C﹢﹢中实现的类相当于是数据的存储结构及其在存储结构上实现的对数据的操作。
线性表
线性表是最简单常用的一种数据结构,例如字母表(A,B,…,Z),成绩单等等