1、这本生动的书
- 引用各种各样的生活知识来类比
- 充分运用图形语言来体现抽象内容
- 主要内容:
1、顺序结构与链式结构差异
2、栈与队列的应用
3、串的朴素模式匹配 KMP模式匹配
4、二叉树前中后序遍历 霍夫曼树及应用
5、图的深度、广度遍历 最小生成树两种算法 最短路径两种算法 拓扑排序与关键路劲算法
6、折半查找 插值查找 斐波那契查找等静态查找
稠密索引、分块索引、倒排索引等索引技术
二叉排序树、平衡二叉树等动态查找
B树、B+树技术
散列表技术
7、冒泡、选择、插入、希尔、归并、快排、堆、基数、计数、桶
2、告诉我们为啥要看。。。
-
我所需要的数据结构,在编程语言的开发工具包中都有完美的实现,
我只需要掌握如何使用它们就可以了,为什么还要去弄懂这里面的
算法原理呢? -
知其然,还应知其所以然
这样,你解决问题的思路会更优雅 更优雅的读代码和二次开发
3、重温数据结构和算法基本概念
-
计算机 ==== 数值计算工具
具体问题 --抽象–> 数学模型 --设计操作(算法)–> 答案
so,设计解决非数值问题中的 操作对象+关系和操作 == 数据结构 -
数据结构的比喻:分子结构,指组成分子的原子之间的排列方式
上专业的:是相互之间存在一种或多种特定关系的数据元素的集合 -
数据元素的比喻:人是人类的数据元素 牛、马… 是畜类的数据元素
上专业的:是组成数据的、有一定意义的基本单位 单位 单位 -
数据项的比喻:眼、耳、嘴、姓名、年龄都是人的数据项
上专业的:若干个数据项组成一个数据元素 不可分割的最小单位 单位 单位 -
数据项是数据的最小单位,但真正讨论问题时,数据元素才是数据结构中
建立数据模型的着眼点
比喻:讨论一部电影,是讨论角色这样的“数据元素”,而不是针对这个角色
的姓名或者这样的“数据项”去研究分析 -
作者用形象的比喻介绍数据:巧妇难为无米之炊的米就是数据
上专业的:是描述客观事物的符号 计算机中可操作的对象;
这些符号是可输入到计算机中的;
这些符号是能被计算机程序处理的; -
数据对象是性质相同(相同数量和类型的)的数据元素的集合 = 数据
-
分类:逻辑结构和物理结构
-
逻辑结构是针对具体问题的,集合 线性 树形 图形
-
物理结构是面向计算机的,将数据及其逻辑关系存储到内存中
物理结构=存储结构 数据的逻辑结构在计算机中的存储形式 应正确反应数据元素之间的逻辑关系 如何存储数据元素之间的逻辑关系是实现物理结构的重点和难点 -
排队打饭比喻顺序存储结构
银行叫号服务比喻链式存储结构 -
数据类型:用来说明变量或表达式的取值范围和所能进行的操作那为什么考虑到数据类型呢?
大家都需要住房子,但没钱考虑大房子没啥意义,于是商品房就出现了各种各样的房型,满足不同人的需要;
计算机也一样,如果是做加减乘除,显然不需要开辟很大的内存空间,于是研究者们就对数据进行分类; -
抽象数据类型
不同的计算机有不同的硬件系统,要求程序语言 ==== 编译/解释 ===>汇编
或机器语言,但高级语言不关心底层CPU进行了几次开关操作 我们
无论什么计算机 什么语言都面临这整数、字符串等操作 所以进行抽象 -
抽象是抽出问题的特征而忽略非本质的细节
-
抽象数据类型定义了一个数据对象、数据对象中各数据元素之间的关系
以及对数据元素的操作 -
抽象数据类型把具体的问题分解为多个规模小且容易处理的问题(数据模型)
每个功能模块都是一个独立的单元,使具体的实现过程隐藏 -
标准格式:
ADT 抽象数据类型名
Data 数据元素之间的逻辑关系的定义
Operation
操作1
操作2
- 算法是解决特定问题求解步骤的描述,在计算机中为指令的有限序列,并且每条指令表示一个或多个操作
- 特性:有穷 正确 可行 输入 输出
- 设计:正确 可读 健壮 高效 低存储
4、读书感受
- 大话数据结构以讲课的口吻传输知识,很有亲和力
- 每一章讲的背景,结合工作中以前碰到的知识 ,极大的梳理了概念背后的逻辑
- 尤其是前两章关于数据结构和算法的由来、定义,需要和练习题仔细品尝
- 栈在四则运算中的应用:
将中缀表达式转为后缀表达式
后缀表达式通过栈计算
- 串—KMP匹配原理
让没必要的回溯不发生
保证主串 i 值不回溯,j 值的多少取决于当前字符串之前的串的前后缀的相似度
把T串各个位置的j值的变化定义为一个数组next
- 线索二叉树 ==== 双向链表
对二叉树以某种次序遍历使其变为线索二叉树的过程称作线索化
- 二叉搜索树的删除操作
- 平衡二叉树的插入和删除 旋转操作
- 快排和归并的非递归实现、创建堆
- 图还没有涉猎,未完待续。。。