西方文化概论重点 概论- 基本概念和术语(二)
概论- 基本概念和术语(二)
数据的四种基本存储方法
数据的存储结构可用以下四种基本存储方法得到
( )顺序存储方法
该方法把逻辑上相邻的结点存储在物理位置上相邻的存储单元里 结点间的逻辑关系由存储单元的邻接关系来体现
由此得到的存储表示称为顺序存储结构 ( Sequential Storage Structure ) 通常借助程序语言的数组描述
该方法主要应用于线性的数据结构 非线性的数据结构也可通过某种线性化的方法实现顺序存储
( )链接存储方法
该方法不要求逻辑上相邻的结点在物理位置上亦相邻 结点间的逻辑关系由附加的指针字段表示 由此得到的存储表示称为链式存储结构(
Linked Storage Structure ) 通常借助于程序语言的指针类型描述
( ) 索引存储方法
该方法通常在储存结点信息的同时 还建立附加的索引表
索引表由若干索引项组成 若每个结点在索引表中都有一个索引项 则该索引表称之为稠密索引( Dense Index ) 若一组结点在索引表中只
对应一个索引项 则该索引表称为稀疏索引 (Spare Index) 索引项的一般形式是
( 关键字 地址 )
关键字是能唯一标识一个结点的那些数据项 稠密索引中索引项的地址指示结点所在的存储位置;稀疏索引中索引项的地址指示一组结点的起始
存储位置
( ) 散列存储方法
该方法的基本思想是 根据结点的关键字直接计算出该结点的存储地址
四种基本存储方法 既可单独使用 也可组合起来对数据结构进行存储映像
同一逻辑结构采用不同的存储方法 可以得到不同的存储结构 选择何种存储结构来表示相应的逻辑结构 视具体要求而定 主要考虑运算方便
及算法的时空要求
数据结构三方面的关系
数据的逻辑结构 数据的存储结构及数据的运算这三方面是一个整体 孤立地去理解一个方面 而不注意它们之间的联系是不可取的
存储结构是数据结构不可缺少的一个方面 同一逻辑结构的不同存储结构可冠以不同的数据结构名称来标识
【例】线性表是一种逻辑结构 若采用顺序方法的存储表示 可称其为顺序表;若采用链式存储方法 则可称其为链表;若采用散列存储方法
则可称为散列表
数据的运算也是数据结构不可分割的一个方面 在给定了数据的逻辑结构和存储结构之后 按定义的运算集合及其运算的性质不同 也可能导致
完全不同的数据结构
【例】 若对线性表上的插入 删除运算限制在表的一端进行 则该线性表称之为栈;若对插入限制在表的一端进行 而删除限制在表的另一端
进行 则该线性表称之为队列 更进一步 若线性表采用顺序表或链表作为存储结构 则对插入和删除运算做了上述限制之后 可分别得到顺序
栈或链栈 顺序队列或链队列
数据类型(Data Type)
所谓数据类型是一个值的集合以及在这些值上定义的一组操作的总称 通常数据类型可以看作是程序设计语言中已实现的数据结构
【例 】C语言的 整数类型 就定义了一个整数可取值的范围(其最大值INT MAX依赖于具体机器)以及对整数可施加的加 减 乘 除和取模
等操作
按 值 是否可分解 可将数据类型划分为两类
① 原子类型 其值不可分解 通常是由语言直接提供
【例】 C语言的整型 字符型等标准类型及指针等简单的导出类型;
② 结构类型 其值可分解为若干个成分(或称为分量) 是用户借助于语言提供的描述机制自己定义的 它通常是由标准类型派生的 故它
也是一种导出类型
【例】 C的数组 结构等类型
抽象数据类型(Abstract Type简称ADT)
ADT是指抽象数据的组织和与之相关的操作 可以看作是数据的逻辑结构及其在逻辑结构上定义的操作
一个ADT可描述为
ADT ADT Name{
Data://数据说明
数据元素之间逻辑关系的描述
Operations://操作说明
Operation ://操作 它通常可用C或C﹢﹢的函数原型来描述
Input:对输入数据的说明
Preconditions:执行本操作前系统应满足的状态//可看作初始条件
Process:对数据执行的操作
Output:对返回数据的说明
Postconditions:执行本操作后系统的状态// 系统 可看作某个数据结构
Operation ://操作
……
}//ADT
抽象数据类型可以看作是描述问题的模型 它独立于具体实现 它的优点是将数据和操作封装在一起 使得用户程序只能通过在ADT里定义的
某些操作来访问其中的数据 从而实现了信息隐藏 在C﹢﹢中 我们可以用类(包括模板类)的说明来表示ADT 用类的实现来实现ADT【参阅
[ ]】 因此 C﹢﹢中实现的类相当于是数据的存储结构及其在存储结构上实现的对数据的操作
ADT和类的概念实际上反映了程序或软件设计的两层抽象 ADT相当于是在概念层(或称为抽象层)上描述问题 而类相当于是在实现层上
描述问题 此外 C﹢﹢中的类只是一个由用户定义的普通类型 可用它来定义变量(称为对象或类的实例) 因此 在C﹢﹢中 最终是通过操

作对象来解决实际问题的 所以我们可将该层次看作是应用层 例如 main程序就可看作是用户的应用程序
由于C语言中没有提供 类 这一数据类型 因此无法实现ADT 故我们不采用ADT的形式来描述数据结构 以节省篇幅 大家只要记住 它实
lishixinzhi/Article/program/sjjg/201311/23586