画布 1
基础入门
  基本概念
    数据
      信息的载体
      客观事物属性的数、字符以及所有能够输入到计算机包中并且被计算机程序识别和处理的集合
    数据元素
      数据的基本单位
      一个数据元素由若干个数据项组成
      数据项是构成数组元素的最小单位，且不可分割
    数据对象
      具有相同性质的数据元素的集合
      数据的子集
    数据类型
      原子类型：不可再分的数据类型
      结构类型：可以分解成若干分量（成分）的数据类型
      抽象数据类型：抽象出具组织和其相关的操作
    抽象数据类型（ADT）
      定义：一个数学模型以及定义在该模型上的一组操作
      特点：与计算机内部如何表示和实现是没有关系
      作用：数据封装和信息隐藏，让实现与使用相分离
      注意：不论内部结构如何变化，只要其数学特性不变，就不会影响到外部的使用
  数据结构（三要素）
    逻辑结构
      线性结构：线性表、栈、队列、串、数组...
      非线性结构：树、图、集合...
      集合：除了“同属于一个集合”的关系外，别无其他关系。
      线性结构：只存在一对一的关系。
      树形结构：存在一对多的关系。
      图状结构和网状结构：存在多对多的关系。
    存储（物理）结构
      顺序存储
        逻辑上相邻的元素存储在物理位置上也相邻的存储单元里，元素之间的关系由存储单元的邻接关系来体现
        优点
          可以实现随机存取
          元素占用最少的存储空间
        缺点
          只能使用相邻的一整块存储单元，依赖于物理结构相邻
          容易产生外部碎片
      链式存储
        与顺序存储不同，链式存储不要求逻辑上相邻的元素在物理位置上也相邻
        优点
          不会出现碎片现象
          充分利用所有存储单元
        缺点
          除了存储元素外，还需要额外存储指针，会占用额外的存储空间（结合数据库索引学习）
          链式存储，只能实现顺序存取，不能实现随机存取（指针的遍历）
      索引存储
        存放数据元素和元素间关系的存储方式，在存储元素信息的同时，还需要建立附加的索引表
        优点
          检索快（就好比字典有了目录，查询就很快了）
        缺点
          增加了索引表，占用较多的存储空间（典型的空间换时间策略）
          增加、删除数据时，需要对应修改索引表，花费更多时间
      散列（Hash）存储
        根据元素的关键字直接通过散列（Hash）函数计算出元素的存储地址。
        优点
          检索快
          添加、删除元素结点操作快（获取元素地址直接，整体时间就少了）
        缺点
          非常依赖于散列函数
          会出现散列冲突（主要依赖与散列函数，散列函数不好就很容易出现散列冲突）
          出现散列冲突时，解决冲突就会增加时间和空间上的开销
    数据的运算
      运算的定义：针对逻辑结构，指出运算的功能
      运算的实现：针对存储结构，指出运算的具体操作步骤
  算法与算法评价
    算法
      定义
        对特定问题求解步骤的一种描述
        是指令的有序集合
        每一条指令表示一个或多个操作
      五大特性
        有穷性：执行有穷步后结束、在有穷时间内完成
        确定性：每条指令的含义明确，不会产生二义性，对相同的输入只能得出相同的结果
        可行性：算法中描述的操作都是可以通过已经实现的基本运算执行有限次来实现的
        输入：有零个或者多个输入，输入取决于某个特定的对象的集合
        输出：有一个或者多个输出，输出是和输入有着某种特定关系的量
      好算法追求的目标
        正确性：需要正确的解决求解问题
        可读性：便于理解
        健壮性：在输入非法数据时，算法也能适当地做出反应或进行处理，而不会产生莫名奇妙的输出结果
        效率与低存储量需求
          效率：算法执行的时间--->时间复杂度
          存储量需求：算法那执行过程中所有要的最大存储空间--->空间复杂度
    算法的评价
      程序语句频度：程序语句在算法中被重复执行的次数
      时间复杂度O(n)
        最坏空间复杂度：最坏情况下，算法的时间复杂度
        平均空间复杂度：所有可能输入实例在同等概率出现的情况下，算法的期望运行时间
        最好空间复杂度：最好的情况下，算法的时间复杂度
      空间复杂度S(n)
        用来定义算法运行过程中需要耗费的存储空间
        渐进空间复杂度也被称为空间复杂度
记作：S(n)=O(g(n))