目录

数据结构学习(一)

数据结构——用C语言描述(一)

数据结构绪论

数据结构基础概念

  • 数据(Data):描述客观事物的数值、字符,能被机器输入且处理的的各种符号的集合。

  • 数据元素(Data Element):组成数据的基本单位,是数据集合的个体。一条记录就是一个数据元素。

  • 数据对象(Data Object):性质相同的数据元素的集合,是数据的一个子集。

  • 数据结构(Data Structure):指相互之间存在一种或多种特定关系的数据元素集合。即数据元素之间的相互关系,即数据的组织形式。一句话总结:带有结构的数据元素的集合

  • 数据类型(Data Type):一组性质相同的值集合以及定义在这个值集合上的一组操作的总称。即值域、定义域及运算集合。

  • 抽象数据类型(Abstract Data Type):定义了一个数据对象,数据对象中各元素之间的结构关系,以及一组处理数据的操作。包括定义和实现两方面,其中定义是独立于实现的。

    ADT 三要素:

    • 数据元素
    • 数据关系
    • 数据操作

数据结构内容

  • 逻辑结构:数据元素之间逻辑关系描述。

    四种基本数据逻辑结构表现为四种数据元素关系:

    • 集合结构:属于关系
    • 线性结构:一对一的线性关系
    • 树形结构:一对多的层次关系
    • 图形结构:多对多的任意关系
  • 存储结构(物理结构):逻辑结构在计算机中存储映像,是逻辑结构在计算机中的实现。包括数据元素的表示和关系的表示。

    数据元素之间关系在计算机中表示方法:

    • 顺序映像,一组连续单元,如数组。
    • 非顺序映像,一组任意存储单元,如链表。
  • 运算集合

算法与算法描述

  • 算法(algorithm)定义:规则的有限集合,是为解决特定问题而规定一系列操作。
  • 算法特性:
    • 有限性:有限步骤
    • 确定性:无二义性
    • 输入:有多个或0个输入
    • 输出:至少有一个输出
    • 可行性:原则上能精确进行,操作可通过已实现的基本运算执行有限次而完成
  • 算法设计要求:
    • 正确性
    • 可读性
    • 健壮性(鲁棒性):对非法输入的抵抗能力
    • 高效率与低存储量
  • 算法描述:自然语言、框图、高级语言

算法性能评价

  • 性能评价:问题规模 N 的函数

  • 数量关系评价:时间和空间

    • 算法执行时间:本质是语句执行次数的比较

    • 语句频度:该语句在一个算法中的重复执行的次数

    • 算法的时间复杂度: $$ T(n)=O(f(n)) $$ 例如:

      1
      2
      3
      
      for (int i = 0; i < n; i++)
      	for (int j = 0; j < n; j++)
      		x++;
      

      这样的一段代码其时间复杂度为 $$ o(n^2) $$ 再例如,下方有一个算法的执行时间 $$ f(n)=2n^3+2n^2+n $$ 其时间复杂度为 $$ o(n^3) $$ 但这样一个算法只是理论上可行,但实际上不可行,因为其执行次数上升太快,程序无法实现。

    • 最坏时间复杂度:算法在最坏情况下基本操作执行时间的上界。

      例如,冒泡排序算法最坏时间复杂度为 $$ o(n^2) $$ 而其最好时间复杂度为 $$ o(n) $$

    • 算法空间复杂度:以存储单元个数刻画随问题规模增加的函数 f(n),是考虑程序运行时占用内存的大小,记作 $$ S(n)=O(f(n)) $$