数据结构和算法(概念篇)

2019-03-27

回想当年大学书本上的一句话:程序 = 数据结构 + 算法
数据结构就是将数据按照某种特定的结构来保存,设计良好的数据结构会导致好的算法
算法相当于逻辑,小部分已为人们发掘出来,可看成一种模式

数据结构 -> 存储
算法 -> 逻辑

基础概念

数据结构

  1. 数据:所有能被输入到计算机中,且能被计算机处理的符号的集合。是计算机操作的对象的总称
  2. 数据元素:数据(集合)中的一个 “个体”,数据及结构中讨论的基本单位
  3. 数据项:数据的不可分割的最小单位。一个数据元素可由若干个数据项组成
  4. 数据类型:在一种程序设计语言中,变量所具有的数据种类。整型、浮点型、字符型等等
  5. 逻辑结构:数据之间的相互关系(可将其分为 线性结构 和 非线性结构)

    1. 集合:结构中的数据元素除了同属于一种类型外,别无其它关系
    2. 线性结构:数据元素之间一对一的关系

      • 线性表
        • 链表(Linked list)
      • 队列(Queue)
      • 栈(Stack)
      • 双队列
      • 数组
    3. 树形结构:数据元素之间一对多的关系

      • 二叉树
        • 满二叉树
        • 完全二叉树
      • 二叉查找树(Binary Sort Tree)
      • 平衡二叉树
        • 平衡查找树之 AVL树
        • 平衡二叉树之红黑树
      • B树
        • B+树
    4. 图状结构或网状结构:结构中的数据元素之间存在多对多的关系
  6. 物理结构/存储结构:数据在计算机中的表示
    1. 顺序结构
    2. 链式结构
    3. 索引结构
    4. 哈希结构
    5. 。。。

算法

  1. 算法五个特性: 有穷性、确定性、可行性、输入、输出
  2. 算法设计要求:正确性、可读性、健壮性、高效率与低存储量需求(好的算法)
  3. 时间复杂度:算法的执行时间与原操作执行次数之和成正比
    时间复杂度有小到大:O(1)、O(logn)、O(n)、O(nlogn)、O(n^2)、O(n^3)
    幂次时间复杂度有小到大:O(2^n)、O(n!)、O(n^n)
  4. 空间复杂度:只需要分析除输入和程序之外的辅助变量所占额外空间
    输入数据所占空间只取决于问题本身,和算法无关