第一章、数据结构绪论

目录:

课件:

 

1.数据结构概念

程序=数据结构+算法
notion image

1.1基本概念

数据是信息的载体,是描述客观事物属性的数、字符及所有能输入到计算机中并被计算机程序识别和处理的符号的集合。数据是计算机程序加工的原料
notion image
 

1.2数据元素、数据项:

数据元素是数据的基本单位,通常作为一个整体进行考虑和处理。 一个数据元素可由若干数据项组成,数据项是构成数据元素的不可分割的最小单位

1.3数据类型、抽象数据类型

1.3.1数据类型

数据类型是一个值的集合和定义在此集合上的一组操作的总称。
  1. 原子类型:其值不可再分的数据类型。
  1. 结构类型:其值可以再分解为若干成分(分量)的数据类型。

1.3.2抽象数据类型

抽象数据类型(Abstract Data Type,ADT)是抽象数据组织及与之相关的操作。
ADT:用数学化的语言定义数据的逻辑结构、定义运算。与具体的实现无关。
定义一个ADT,就是在“定义”一种数据结构
确定了ADT的存储结构,才能“实现”这种数据结构

1.4数据对象、数据结构

数据对象是具有相同性质的数据元素的集合,是数据的一个子集。
数据结构是相互之间存在一种或多种特定关系的数据元素的集合。
notion image

2.数据结构 三要素

2.1逻辑结构

集合、线性结构、树形结构、图状结构或网状结构
notion image
notion image

2.2存储结构(物理结构)

notion image
 

2.2.1顺序结构

逻辑上相邻的元素存储在物理位置上也相邻的存储单元中,元素之间的关系由存储单元的邻接关系来体现。

2.2.2链式存储

逻辑上相邻的元素在物理位置上可以不相邻,借助指示元素存储地址的指针来表示元素之间的逻辑关系。

2.2.3索引存储

在存储元素信息的同时,还建立附加的索引表。索引表中的每项称为索引项,索引项的一般形式是(关键字,地址)

2.2.4散列存储

根据元素的关键字直接计算出该元素的存储地址,又称哈希(Hash)存储

2.2.5补充:

  1. 若采用顺序存储,则各个数据元素在物理上必须是连续的;若采用非顺序存储,则各个数据元素在物理上可以是离散的
  1. 数据的存储结构会影响存储空间分配的方便程度
  1. 数据的存储结构会影响对数据运算的速度(eg:在b和d之间插入新元素c)
  1. 线性表既可以用顺序存储方式实现,又可以用链式存储方式实现。
 

2.3数据的运算:

施加在数据上的运算包括运算的定义实现
  1. 运算的定义针对逻辑结构的,指出运算的功能;
  1. 运算的实现针对存储结构的,指出运算的具体操作步骤。

3.算法

notion image

3.1算法的基本概念

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

3.2算法的特性

  1. 有穷性:一个算法必须总在执行有穷步之后结束,且每一步都可在有穷时间内完成。 注:算法必须是有穷的,而程序可以是无穷的
  1. 确定性:算法中每条指令必须有确切的含义,对于相同的输入只能得出相同的输出
  1. 可行性:算法中描述的操作都可以通过已经实现的基本运算执行有限次来实现。
  1. 输入:一个算法有零个或多个输入,这些输入取自于某个特定的对象的集合。
  1. 输出:一个算法有一个或多个输出,这些输出是与输入有着某种特定关系的量。

3.3“好”算法的特质

  1. 正确性:算法应能够正确地解决求解问题。
  1. 可读性:算法应具有良好的可读性,以帮助人们理解。(就是注释
  1. 健壮性输入非法数据时,算法能适当地做出反应或进行处理,而不会产生莫名其妙的输出结果。
  1. 高效率与低存储量需求
    1. 注:花的时间少,时间复杂度低不费内存,空间复杂度低。

3.4算法总结

notion image

4.算法效率的度量

算法效率的度量是通过时间复杂度空间复杂度来描述的。
notion image

4.1时间复杂度

事前预估算法时间开销T(n)问题规模n的关系(T表示“time”)
 
常见的渐近时间复杂度:”常对幂指阶”
notion image

4.1.1加法规则

多项相加,只保留最高阶的项,且系数变为1

4.1.2乘法规则

多项相乘,都保留

4.1.3逐步递增型

notion image
notion image
 
算法的性能问题只有在n很大的时候才会暴露
 
顺序执行的代码只会影响常数项,可以忽略
顺序执行的代码只会影响常数项,可以忽略
只需挑循环中的一个基本操作分析它的执行次数与n的关系即可
 

4.1.4嵌套循环型

如果有多层嵌套循环,只需关注最深层循环循环了几次
如果有多层嵌套循环,只需关注最深层循环循环了几次

4.1.5指数递增型

循环条件可知,循环结束时刚好满足2^x > n
循环条件可知,循环结束时刚好满足2^x > n

4.1.6搜索数字型

notion image

4.1.7总结

  1. 最坏时间复杂度:最坏情况下算法的时间复杂度
  1. 平均时间复杂度所有输入示例等概率出现的情况下,算法的期望运行时间
  1. 最好时间复杂度:最好情况下算法的时间复杂度(一般不考虑
算法的性能问题只有在n很大的时候才会暴露
算法的性能问题只有在n很大的时候才会暴露

4.2空间复杂度

算法的空间复杂度S(n),定义为该算法所消耗的储存空间,它是问题规模n的函数。记为:
算法原地工作:算法所需内存空间,为常量,即O(1)
 
空间复杂度=递归调用的深度
空间复杂度=递归调用的深度

4.2.1总结

notion image

【教材总结】

一定要掌握分析时间复杂度的方法和步骤,很多读者在做题是一眼就能看出程序的时间复杂度,但就是无法规范的表述其推导过程。
  1. 循环主体中的变量参与循环条件的判断。
  1. 循环主体中的变量与循环条件无关,此类题可采用数据归纳法或直接累计循环次数。
 
  • Twikoo