大话数据结构 读书笔记

大话数据结构

绪论

if yu give someone a program, you will frustate them for a day; if you teach them how to program, you will frustate them for a lifetime.
程序设计 = 数据结构 + 算法
数据结构: 相互之间存在一种或多种特定关系的数据元素的集合
逻辑结构: 集合 / 线性 / 树形 / 图形
物理结构: 顺序 / 链式
抽象数据类型: 问题 -> 分解 / 抽象 / 信息隐藏

算法

算法是解决特定问题求解步骤的描述, 在计算机中变现为指令的有限序列
特性: 输入输出 + 有穷 + 确定 + 可行
要求: 正确性 + 可读性 + 健壮性(不确定输入的处理) + 效率高&存储低
时间复杂度: 1 < logN < N*logN < N^2 < N^3 < 2^N < N! < N^N
最好 / 最差 / 平均 / 空间复杂度

线性表

线性表List: >=0 个数据元素的有限序列
顺序存储
链式存储: 头插法 / 尾插法 / 跳跃删除 / 替代删除
静态链表: 使用数组实现链表
循环链表 / 双向链表

栈&队列

栈stack: 限定在表尾进行操作的线性表
2栈 -> 队列
栈的应用 -> 递归 / 后缀表达式

队列queue: 只允许在一端插入, 在另一端删除的线性表
循环队列 -> 队列存储不足

黄山叶落松落叶山黄
百度百科 – 璇玑图

串: 由 >=0 个字符组成的有限序列
串的比较: 比较字符的 ASCII 码

朴素的模式匹配算法 / KMP模式匹配算法

树Tree

森林 -> 树 -> 二叉树 -> null / 1个节点 / 斜树 -> 完全二叉树 -> 满二叉树
性质: 第i层<=2^(i-1); 深度k<=2^(k-1); 度

遍历: 前序/中序/后序(递归/栈 实现) + 层次(队列实现)
前序/后序 + 中序 构建树 -> 获取 root 节点, 就可以通过 中序遍历知道 左右子树

线索二叉树 -> 线索化(线性)

霍夫曼树(每次将权值最小的2个节点构成二叉树) -> 霍夫曼编码

图Graph

图: >0 个有穷顶点和顶点之间的边的集合组成

无向图 / 有向图
邻接矩阵 / 邻接表
dfs / bfs
最小生成树: Prim / Kruskal
最短路径: Dijkstra / Floyd
拓扑排序: 查找入度为0的顶点, 删除此顶点&边, 重复 -> 关键路径

查找

有序表查找: 二分查找 / 插值查找(数据分布均匀) / 斐波那契查找
线性索引查找: 稠密索引(按照关键码有序排列) / 分块索引 / 倒排索引(搜索技术)

二叉排序树BST: 左子树皆小于root, 右子树皆大于root / 查找 / 插入 / 删除 -> 二叉平衡数AVL: 左右子树高度差<=1 / 实现算法

多路查找树(B树): 众多文件中查找
2-3 树 -> 2-3-4 树 -> B 树 -> B+ 树(包含重复节点来标识数据范围)

散列表(hashtable) -> 散列技术(存储 / 查找) -> 散列冲突

排序

排序: 稳定性 / 内排序&外排序 / 时间 / 辅助空间 / 算法复杂性
交换排序: 冒泡 -> 快排
插入排序: 直接插入 -> 希尔
堆排序
归并排序

    原文作者:daydaygo
    原文地址: https://www.jianshu.com/p/aef9300fafe5
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞