数据结构概述

数据概述

概念

数据(Data): 是信息的载体,它能够被计算机识别、存储和加工处理

数据分类

  1. 数值型数据:如整数、实数、布尔值(0或1)等。处理方法由《数值计算》研究。
  2. 非数值型数据:如字符、声音、图像等。处理方法由《数据结构》研究。

数据元素

  1. 是数据的基本单位,在程序中通常作为一个整体来进行考虑和处理。
  2. 在不同的条件下,数据元素又可称为元素、结点、顶点、记录等。例如,学生信息表中的一个记录、图中的一个顶点等,都被称为一个数据元素。
  3. 数据元素由数据项组成(如学生信息表中每条记录的字段值);其中能唯一标识数据元素的数据项称为关键项。

数据对象

是性质相同的数据元素的集合,是数据的一个子集。如字符集合 C = {‘A’,’B’,’C,…}

数据结构

概念

数据结构是一门研究非数值计算的程序设计问题中计算机的操作对象,以及它们之间的关系和操作相关问题的学科。数据结构是相互之间存在一种或多种特定关系的数据元素的集合。

组成部分

  1. 逻辑结构: 数据元素之间逻辑关系的描述 D_S=(D,S)

  2. 存储结构: 数据元素在计算机中的存储及其逻辑关系的表现称为数据的存储结构

    或物理结构。

  3. 数据操作: 对数据要进行的运算。

逻辑结构

  1. 数据结构(Data Structure):是指相互之间具有(存在)一定联系(关系)的数据元素的集合。元素之间的相互联系(关系)称为逻辑结构。
  2. 数据元素之间的逻辑结构有四种基本类型。
    1. 集合:结构中的数据元素除了“同属于一个集合”外,没有其它关系。
    2. 线性结构:结构中的数据元素之间存在一对一的关系。
    3. 树型结构:结构中的数据元素之间存在一对多的关系。
    4. 图状结构或网状结构:结构中的数据元素之间存在多对多的关系。
  3. 说明:
    1. 逻辑结构与数据元素本身的形式、内容无关。
    2. 逻辑结构与数据元素的相对位置无关。
    3. 逻辑结构与所含结点个数无关。

物理结构

  1. 定义:物理结构指数据元素在计算机中的存储方式。
  2. 顺序存储方法:数据元素在内存中按序连续存储, 结点间的逻辑关系由存储单元的邻接关系来体现。
  3. 链接存储方法:用指针指出其直接后继结点的存储位置, 结点间的逻辑关系由存储单元的邻接关系来体现。

逻辑结构与存储结构的关系

  1. 一个算法的设计取决于所选定的逻辑结构,而算法的实现依赖于所采用的存储结构。
  2. 在C语言中,用一维数组表示顺序存储结构;用结构体类型表示链式存储结构。
  3. 逻辑结构是从逻辑关系上描述数据,与存储无关,是独立于计算机的。
  4. 逻辑结构是从具体问题抽象出来的数学模型。
  5. 存储结构是逻辑结构用计算机语言的实现(亦称映象)
  6. 数据的运算是定义在数据的逻辑结构上的一个运算的集合。
  7. 运算的实现与存储结构密切相关。
  8. 逻辑结构与存储结构是多对多的关系。

数据结构的运算

  1. 建立(Create)一个数据结构。
  2. 消除(Destroy)一个数据结构。
  3. 从一个数据结构中删除(Delete)一个数据元素。
  4. 把一个数据元素插入(Insert)到一个数据结构中。
  5. 对一个数据结构进行访问(Access)
  6. 对一个数据结构(中的数据元素)进行修改(Modify)
  7. 对一个数据结构进行排序(Sort)
  8. 对一个数据结构进行查找(Search)

抽象数据类型

  1. 抽象数据类型(Abstract Data Type,简称ADT):是指一个数学模型以及定义在该模型上的一组操作。
  2. ADT的定义仅是一组逻辑特性描述, 与其在计算机内的表示和实现无关。因此,不论ADT的内部结构如何变化,只要其数学特性不变,都不影响其外部使用。
  3. ADT的形式化定义是三元组:ADT=(D,S,P) 其中:D是数据对象,S 是 D 上的关系集,P 是对 D 的基本操作集。

算法分析初步

算法

  1. 算法(Algorithm):是对特定问题求解方法(步骤)的一种描述,是指令的有限序列,其中每一条指令表示一个或多个操作。

  2. 算法的特征

    1. 有穷性:一个算法必须总是在执行有穷步之后结束,且每一步都在有穷时间内完成。

    2. 确定性:算法中每一条指令必须有确切的含义。不存在二义性。且算法只有一个入口和一个出口。

    3. 可行性:一个算法是能行的。即算法描述的操作都可以通过已经实现的基本运算执行有限次来实

      现。

    4. 输入:一个算法有零个或多个输入,这些输入取自于某个特定的对象集合。

    5. 输出: 一个算法有一个或多个输出,这些输出是同输入有着某些特定关系的量。

算法描述

  1. 自然语言:用自然语言来描述算法的优点是简单且便于人们对算法的阅读。缺点是不够严谨。
  2. N-S 盒图-程序流程图:其特点是描述过程简洁、明了。
  3. 程序代码:直接使用程序设计语言并不容易,而且不太直观,常常需要借助于注释才能使人看明白。
  4. 伪代码:伪码语言介于高级程序设计语言和自然语言之间,它忽略高级程序设计语言中一些严格的语法规则与描述细节。

算法设计的要求

  1. 正确性:算法应满足具体问题的需求。
  2. 可读性:算法应容易供人阅读和交流。
  3. 健壮性:算法应具有容错处理。
  4. 通用性:算法应具有一般性,即算法的处理结果对于一般的数据集合都成立。

算法效率的度量

  1. 算法性能主要包括算法的时间性能和空间性能。
  2. 算法的时间复杂度指运行算法所需的时间—–该算法中每条语句的执行时间之和。
  3. 空间复杂度是指算法编写成程序后,在计算机中运行时所需存储空间大小的度量。

数据结构与算法的关系

  1. 程序 = 数据结构 + 算法
  2. 数据结构是相互之间存在某种关系的数据元素的集合,算法是解决特定问题的有限求解步骤。
  3. 数据结构是算法实现的基础,算法总是要依赖于某种数据结构实现,设计一种算法时会构建适合于这种算法的数据结构。
  4. 算法抽象一些,侧重对问题的建模,而数据结构则是具体实现。特定的算法往往搭配特定的数据结构,数据结构是为了实现某种特定算法。