数据结构(DS)和抽象数据类型(ADT)

数据结构(Data Structure)

要了解什么是数据结构,首先要明确什么是数据和结构。

数据(Data)

数据是信息的载体。它能够被计算机识别、存储和加工处理,是计算机程序加工的”原料”。
随着计算机应用领域的扩大,数据的范畴包括:整数、实数、字符串、图像和声音等。

数据元素(Data Element)

数据元素是数据的基本单位。数据元素也称元素、结点、顶点、记录。一个数据元素可以由若干个数据项(也可称为字段、域、属性)组成。数据项是具有独立含义的最小标识单位

数据结构(Data Structure)

数据结构指的是数据之间的相互关系,即数据的组织形式

数据结构的组成部分

逻辑结构

数据元素之间的逻辑关系,也称数据的逻辑结构(Logical Structure)。数据的逻辑结构是从逻辑关系上描述数据,与数据的存储无关,是独立于计算机的。数据的逻辑结构可以看作 是从具体问题抽象出来的数学模型。

  • 线性结构:线性结构的逻辑特征是,若结构是非空集,则有且仅有一个开始结点和一个终端结点,并且所有结点都最多只有一个直接前趋和一个直接后继。
    例如,线性表是一个典型的线性结构。栈、队列、串等都是线性结构。

    • 非线性结构:非线性结构的逻辑特征是,一个结点可能有多个直接前趋和直接后继。数组、广义表、树和图等数据结构都是非线性结构。
存储结构

数据元素及其关系在计算机存储器内的表示,称为数据的存储结构(Storage Structure,数据的存储结构是逻辑结构用计算机语言的实现(亦称为映象),它依赖于计算机语言。对机器语言而言,存储结构是具体的。

数据的存储结构有如下四种:

  • 顺序存储方法:该方法把逻辑上相邻的结点存储在物理位置上相邻的存储单元里,结点间的逻辑关系由存储单元的邻接关系来体现。由此得到的存储表示称为顺序存储结构 (Sequential Storage Structure),通常借助程序语言的数组描述。该方法主要应用于线性的数据结构。非线性的数据结构也可通过某种线性化的方法实现顺序存储。

  • 链接存储方法:该方法不要求逻辑上相邻的结点在物理位置上亦相邻,结点间的逻辑关系由附加的指针字段表示。由此得到的存储表示称为链式存储结构(Linked Storage Structure),通常借助于程序语言的指针类型描述。

  • 索引存储方法:该方法通常在储存结点信息的同时,还建立附加的索引表。索引表由若干索引项组成。若每个结点在索引表中都有一个索引项,则该索引表称之为稠密索引(Dense Index)。若一组结点在索引表中只对应一个索引项,则该索引表称为稀疏索引(Spare Index)。索引项的一般形式是:(关键字、地址)

  • 散列存储方法:该方法的基本思想是,根据结点的关键字直接计算出该结点的存储地址。

四种基本存储方法,既可单独使用,也可组合起来对数据结构进行存储映像。同一逻辑结构采用不同的存储方法,可以得到不同的存储结构。选择何种存储结构 表示相应的逻辑结构,视具体要求而定,主要考虑运算方便及算法的时空要求。

抽象数据类型(Abstract Data Type)

抽象数据类型(Abstract Data Type 简称ADT)是指一个数学模型以及定义在此数学模型上的一组操作。抽象数据类型需要通过固有数据类型(高级编程语言中已实现的数据类型)来实现。抽象数据类型是与表示无关的数据类型,是一个数据模型及定义在该模型上的一组运算。

ADT的描述

ADT ADT-Name{
    Data://数据说明
    数据元素之间逻辑关系的描述
    Operations://操作说明
    Operation1://操作1,它通常可用C或C﹢﹢的函数原型来描述
    Input:对输入数据的说明
    Preconditions:执行本操作前系统应满足的状态//可看作初始条件
    Process:对数据执行的操作
    Output:对返回数据的说明
    Postconditions:执行本操作后系统的状态//"系统"可看作某个数据结构


    Operation2://操作2
    ……
  }//ADT 

抽象数据类型(ADT)是纯粹理论实体,用于简化描述抽象算法,分类与评价数据结构,形式描述程序设计语言的类型系统。一个ADT可以用特定数据类型或数据结构实现,在许多程序设计语言中有许多种实现方式;或者用形式规范语言描述。ADT常实现为模块(module):模块的接口声明了对应于ADT操作的例程(procedure),有时用注释描述了约束。

你可能感兴趣的:(数据结构)