数据 数据结构 数据类型 => 本质、区别、联系?

一直不明白数据,数据结构,数据类型,这些到底是什么? 对概念和本质都没有认知。在逻辑上、抽象上、物理上? 这几个又是怎么进行区分,又表示什么?

此处涉及概念比较多,注意区分自造的概念。

概念 => 逻辑上的表现,行为 => 数据的物理存储和操作 ?? 这里就没有弄清楚。

在 js 定义的 数组, 字符串 属于什么? 他们有方法和属性。


  • 数据是信息的载体,是描述客观事物的数、字符、以及所有能输入到计算机中,被计算机程序识别和处理的符号的集合。数据的本质是差异,每一种差异是一个值。数据的意义是用来对比。包含:数值性数据非数值性数据

  • 数据结构 是计算机科学与技术领域常用的术语。它用来反映一个数据的内部构成,即一个数据由哪些成分数据构成,以什么方式构成,呈什么结构。逻辑上的数据结构反映成分数据之间的逻辑关系,物理上的数据结构反映成分数据在计算机内的存储安排。数据结构是数据存在的形式。

    • 数据结构,分为数据的逻辑结构和物理结构
      • 数据的逻辑结构:数据元素之间的逻辑关系 => 集合结构;线性结构;树形结构;图形结构
      • 数据的物理结构:数据元素在计算机存储器中是如何存储的 => 顺序存储(存放在连续的内存地址中);链式存储(数据通过指针指向下一个存储地址,不一定存储在连续的地址空间)
  • 数据类型 数据是按照数据结构分类的,具有相同数据结构的数据属同一类。同一类数据的全体称为数据类型。在程序设计高级语言中,数据类型用来说明一个数据在数据分类中的归属。它是数据的一种属性。这个属性限定了该数据的变化范围。为了解题的需要,根据数据结构的种类,高级语言定义了一系列的数据类型。不同的高级语言所定义的数据类型不尽相同。

    • 数据类型是一个值的集合和定义在这个值上的一组操作的总称。
    • 按照值的不同,高级程序设计语言中数据类型可分为两类:一类是非结构的原子类型,另一类是结构类型。
  • 抽象数据类型 抽象数据类型的含义可理解为数据类型的进一步抽象。即把数据类型和数据类型上的运算捆在一起,进行封装。引入抽象数据类型的目的是把数据类型的表示和数据类型上运算的实现与这些数据类型和运算在程序中的引用隔开,使它们相互独立。对于抽象数据类型的描述,除了必须描述它的数据结构外,还必须描述定义在它上面的运算(过程或函数)。抽象数据类型上定义的过程和函数以该抽象数据类型的数据所应具有的数据结构为基础。

    • 抽象数据类型实际上就是对该数据结构的定义。因为它定义了一个数据的逻辑结构以及在此结构上的一组算法。
    • 抽象数据类型只是在数据的逻辑结构上讨论问题,与数据的存储结构无关。

整体的概念以 WIKI 上为准。

  • 抽象数据类型 其中涉及 抽象数据结构, 数据结构的实现,数据的存储结构, 数据的逻辑结构

参考:

计算机科学中有两种常见的抽象:

  • procedural(functiona) abstraction: 过程抽象,指使用一个函数或方法而忽略它的具体实现。
  • data abstraction: 数据抽象,指数据类型的属性(值和操作方法)与数据类型的具体实现分离。

常用术语定义

  • collection: 集合,指一组数据值,单个数据值之间没有隐含的组织关系。
  • container: 容器,指存储和组织一个集合的数据结构或 ADT。集合中的单个数据值称为容器的元素 (element),当容器中没有元素时,称容器为空 (empty)。Python 中的容器例子有: string, tuple, list, dict, set。
  • sequence: 序列,是一种容器,该容器的元素按线性排列,并且每个元素能通过其位置访问(即通过下标访问)。Python 中的序列例子: string, tuple, list。
  • sorted sequence: 有序序列,元素的位置基于每个元素的前后元素的某种预定关系确定。