Skip to content

数据结构与算法

  • 数据结构的三要素
    • 逻辑结构
      • 线性结构:线性表、栈、队列
      • 非线性:树、图、集合
    • 存储结构(物理结构)
    • 数据的运算
  • 算法的特征
    • 算法定义
    • 五个特性:有穷性、确定性、可行性、输入、输出
    • 效率的度量:时间复杂度、空间复杂度

数据结构的基本概念

  • 数据:数据是信息的载体,是描述客观事物属性的数、字符以及所有计算机能识别符合的集合。是计算机程序加工的原料。

  • 数据元素:是数据的基本单位,通常作为一个整体进行考虑和处理。

    • 可由若干数据项组成,数据项是构成数据元素不可分割的最小单位。
    • 例子:一个人可以抽象成一个数据元素,人的年龄、身高、性别等属性就是数据项。
  • 数据对象:具有相同属性数据元素的集合,是数据的一个子集。例如:学生就是一个数据对象。

  • 数据类型:值的集合和定义在值集上一组操作的总称。例如:整型变量,值集是某个区间的整数(区间大小依赖不同机器),定义的操作有加、减、乘、除和取模等算术运算。

  • 数据结构:是相互之间存在一种或多种特定关系的数据元素的集合。

    • 在任何问题中,数据元素都不是孤立存在的,他们之间存在某种关系,这种数据元素之间的关系称为结构:逻辑结构、存储结构、数据运算。
    • 逻辑结构和存储结构密不可分,算法的设计取决于逻辑结构,算法的实现依赖于存储结构。

数据结构三要素

逻辑结构:数据之间的逻辑关系

  • 线性:数据元素只存在一对一关系
    • 一般线性表
    • 受限线性表:栈、队列
    • 线性表推广:数组、广义表
  • 非线性:没有对应、一对多、多对多
    • 集合:同属集合,没有其他对应关系
    • 树形结构:一对多关系
      • 一般树
      • 二叉树
    • 图状结构:多对多
      • 有向图
      • 无向图

存储结构:数据结构在计算机中的表示,也称物理结构,依赖计算机语言

  • 顺序存储:逻辑上相邻的元素存储在物理位置也相邻的存储单元中,元素间的关系由存储单元的邻接关系体现
    • 优点:可实现随机存取,每个元素占最少的存储空间
    • 缺点:只能使用相邻的一整块存储单元,因此可能产生较多的外部碎片
  • 链式存储:不要求逻辑上相邻的元素在物理位置上也相邻,借助指针表示元素之间的逻辑关系
    • 优点:不会出现碎片,能充分利用所有存储单元
    • 缺点:需要额外的存储空间存储指针,而且只能实现顺序存取
  • 索引存储:在存储元素信息的同时,建立附加的索引表
    • 优点:检索速度快
    • 缺点:附加额外的空间存储索引,增删数据也要修改索引表,因而会花费较多时间
  • 散列存储:根据元素的关键字计算出存储地址,又称哈希(Hash)存储
    • 优点:检索、增删结点的操作都很快
    • 缺点:若散列函数不好,则可能出现存储单元冲突,而解决冲突会增加时间和空间开销

数据的运算:数据的运算包括运算的定义和实现

  • 运算的定义:针对逻辑结构,指出运算的功能
  • 运算的实现:针对存储结构,指出运算的具体操作步骤

算法的基本概念

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

算法的五个特性

  • 有穷性:执行有穷步结束,有穷时间完成
  • 确定性:每个输入对应唯一的输出
  • 可行性:每个操作只能基于已实现的基本操作
  • 输入:零个或多个输入
  • 输出:一个或多个输出

算法效率的度量

时间复杂度:语句在算法中被执行的次数

O(1) < O(log(2)n) < O(n) < O(nlog(2)n) < O(n^2) < O(n^3) < O(2^n) < O(n!) < O(n^n)

空间复杂度:算法耗费的存储空间