数据结构导论笔记

什么是数据结构

程序设计 = 数据结构+算法

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

逻辑结构和物理结构

传统上,我们把数据结构分为逻辑结构和物理结构。

逻辑结构

逻辑结构,是指数据对象中数据元素之间的相互关系,也是我们今后
需要关注讨论的问题。

物理结构

是指数据的逻辑结构在计算机中的存储形式。

我们实际上研究的就是如何把数据元素存储到计算机的存储器中。

四大逻辑结构

  • 集合结构:集合结构中的数据元素除了同属于一个集合外,它们之间没有其他关系。

  • 线性结构:线性结构中的数据元素之间是一对一的关系。

  • 树形结构:元素之间存在一种一对多的层次关系。

  • 图形结构:数据元素是多对多的关系

顺序存储和链式存储

  • 顺序存储:是把数据元素存放在地址连续的存储单元里,其数据间的逻辑关系和物理关系
    是一致的。

比如说:数组

  • 链式存储:是把数据元素存放在任意的存储单元里,这组存储单元可以是
    连续的,也可以是不连续的。

如果在内存空间中不连续,所以就需要用一个指针存放数据元素的地址,
这样子通过地址就可以找到相关联数据元素的位置。

算法

算法是解决特定问题求解步骤的描述,在计算机中表现为指令的有限序列,
并且每条指令表示一个或多个操作。

算法具有五个基本特征:

  • 输入 : 算法具有零个或多个输入
  • 输出 : 算法至少有一个或多个输出
  • 有穷性 : 算法在执行有限步骤之后,会自动结束
  • 确定性 : 算法的每一步骤都具有确定的含义,不会出现二义性
  • 可行性 : 算法的每一步都必须是可行的

算法设计的要求

正确性:算法至少应该具有输入、输出和加工处理无歧义性、能正确
反映问题的需求,能够得到问题的正确答案。

大体分为以下四个层次:

  • 算法程序没有语法错误。
  • 算法程序对于合法输入能够产生满足要求的输出。
  • 算法程序对于非法输入能够产生满足规格的说明。
  • 算法程序对于故意刁难的测试输入都有满足要求的输出结果。

可读性:便于阅读、理解和交流。

健壮性:当输入数据不合法时,能够有反馈。

时间效率高和存储量低。

算法效率的度量方法

事前分析估算方法:在计算机程序编写前,依据统计方法对算法进行估算。

一个高级语言编写的程序在计算机上运行时所消耗的时间取决于下列因素:

  • 算法采用的策略、方案
  • 编译产生的代码质量
  • 问题的输入规模
  • 机器执行指令的速度

函数的渐近增长
假设两个算法的输入规模都是n

算法A要做2n+3次操作,
我们可以这么理解:先执行n次的循环,执行完成后再有一个n次的循环
,最后有3次运算。

算法B要做3n+1次操作,理解同上没你觉得它们哪一个更快?
在n=1的时候A是没有B快的,当n>=2的时候,算法B的执行次数就开始比A少了。