封面
版权信息
作者简介
内容简介
作者感言
前言
本书定位
本书特色
本书内容
本书读者
本书研读方法
编程语言说明
编程语言差异
不是一个人在战斗
编者的话
第1章 数据结构绪论
1.1 开场白
1.2 你数据结构怎么学的?
1.3 数据结构起源
1.4 基本概念和术语
1.5 逻辑结构与物理结构
1.6 抽象数据类型
1.7 总结回顾
1.8 结尾语
第2章 算法
2.1 开场白
2.2 数据结构与算法关系
2.3 两种算法的比较
2.4 算法定义
2.5 算法的特性
2.6 算法设计的要求
2.7 算法效率的度量方法
2.8 函数的渐近增长
2.9 算法时间复杂度
2.10 常见的时间复杂度
2.11 最坏情况与平均情况
2.12 算法空间复杂度
2.13 总结回顾
2.14 结尾语
第3章 线性表
3.1 开场白
3.2 线性表的定义
3.3 线性表的抽象数据类型
3.4 线性表的顺序存储结构
3.5 顺序存储结构的插入与删除
3.6 线性表的链式存储结构
3.7 单链表的读取
3.8 单链表的插入与删除
3.9 单链表的整表创建
3.10 单链表的整表删除
3.11 单链表结构与顺序存储结构优缺点
3.12 静态链表
3.13 循环链表
3.14 双向链表
3.15 总结回顾
3.16 结尾语
第4章 栈与队列
4.1 开场白
4.2 栈的定义
4.3 栈的抽象数据类型
4.4 栈的顺序存储结构及实现
4.5 两栈共享空间
4.6 栈的链式存储结构及实现
4.7 栈的作用
4.8 栈的应用——递归
4.9 栈的应用——四则运算表达式求值
4.10 队列的定义
4.11 队列的抽象数据类型
4.12 循环队列
4.13 队列的链式存储结构及实现
4.14 总结回顾
4.15 结尾语
第5章 串
5.1 开场白
5.2 串的定义
5.3 串的比较
5.4 串的抽象数据类型
5.5 串的存储结构
5.6 朴素的模式匹配算法
5.7 KMP模式匹配算法
5.8 总结回顾
5.9 结尾语
第6章 树
6.1 开场白
6.2 树的定义
6.3 树的抽象数据类型
6.4 树的存储结构
6.5 二叉树的定义
6.6 二叉树的性质
6.7 二叉树的存储结构
6.8 遍历二叉树
6.9 二叉树的建立
6.10 线索二叉树
6.11 树、森林与二叉树的转换
6.12 赫夫曼树及其应用
6.13 总结回顾
6.14 结尾语
第7章 图
7.1 开场白
7.2 图的定义
7.3 图的抽象数据类型
7.4 图的存储结构
7.5 图的遍历
7.6 最小生成树
7.7 最短路径
7.8 拓扑排序
7.9 关键路径
7.10 总结回顾
7.11 结尾语
第8章 查找
8.1 开场白
8.2 查找概论
8.3 顺序表查找
8.4 有序表查找
8.5 线性索引查找
8.6 二叉排序树
8.7 平衡二叉树(AVL树)
NOTE
平板就是一个世界,当诱惑降临,当人心中的平衡被打破,世界就会混乱,最后留下的只有孤独寂寞失败。这种单调的机械化社会,禁不住诱惑的侵蚀,很容易崩溃。最容易被侵蚀的,恰恰是最空虚的心灵。
2022-10-16 14:13:54
NOTE
平衡二叉树(Self-Balancing Binary Search Tree或Height-Balanced Binary Search Tree),是一种二叉排序树,其中每一个节点的左子树和右子树的高度差至多等于1。
2022-10-16 14:14:08
NOTE
二叉树上结点的左子树深度减去右子树深度的值称为平衡因子BF(Balance Factor)
2022-10-16 14:15:41
NOTE
只要二叉树上有一个结点的平衡因子的绝对值大于1,则该二叉树就是不平衡的
2022-10-16 14:15:52
NOTE
距离插入结点最近的,且平衡因子的绝对值大于1的结点为根的子树,我们称为最小不平衡子树
2022-10-16 14:16:58
NOTE
。因为BF值为正,因此我们将整个树进行右旋(顺时针旋转)
2022-10-16 14:28:42
NOTE
由于BF是负值,所以我们对这棵最小平衡子树进行左旋(逆时针旋转),如图4,此时我们整个树又达到了平衡
2022-10-16 14:29:24
NOTE
注意此时本来结点3是4的左孩子,由于旋转后需要满足二叉排序树特性,因此它成了结点2的右孩子
2022-10-16 14:30:38
NOTE
它们俩一正一负,符号并不统一,而前面的几次旋转,无论左还是右旋,最小不平衡子树的根结点与它的子结点符号都是相同的。
2022-10-16 14:31:52
NOTE
当最小不平衡子树根结点的平衡因子BF是大于1时,就右旋,小于-1时就左旋
2022-10-16 14:40:20
NOTE
插入结点后,最小不平衡子树的BF与它的子树的BF符号相反时,就需要对结点先进行一次旋转以使得符号相同后,再反向旋转一次才能够完成平衡操作,如上例中结点9、8的插入时
2022-10-16 14:40:33
NOTE
当传入一个二叉排序树P,将它的左孩子结点定义为L,将L的右子树变成P的左子树,再将P改成L的右子树,最后将L替换P成为根结点
2022-10-16 14:44:19
8.8 多路查找树(B树)
NOTE
每一个人都只是用直觉与反射神经在互相应对,不可能有深度的思考与规划
2022-09-25 12:43:19
NOTE
语言是沟通的工具,文字是记录存证的工具,而文字化的过程,又可以让思考彻底沉淀,善于使用文字的人,通常是深沉而严谨的
2022-09-25 12:43:27
NOTE
内存中的运算时间复杂度
2022-09-25 12:45:23
NOTE
在这种情况下,对数据的处理需要不断从硬盘等存储设备中调入或调出内存页面
2022-09-25 12:45:37
NOTE
这就使得内存存取外存次数非常多,这显然成了时间效率上的瓶颈,这迫使我们要打破每一个结点只存储一个元素的限制,为此引入了多路查找树的概念。 多路查找树(muitl-way search tree),其每一个结点的孩子数可以多于两个,且每一个结点处可以存储多个元素
2022-09-25 12:46:32
NOTE
我们讲解它的4种特殊形式:2-3树、2-3-4树、B树和B+树
2022-09-25 12:47:48
NOTE
如果2-3树插入的传播效应导致了根结点的拆分,则树的高度就会增加
2022-09-25 14:58:54