早前的思考:https://doctording.blog.csdn.net/article/details/52744016
以及最近leetcode刷题看到如下一段话
冒泡排序,选择排序,插入排序,快速排序,堆排序,归并排序,希尔排序,桶排序,基数排序新年帮您排忧解难。
有向图,无向图,有环图,无环图,完全图,稠密图,稀疏图,拓扑图祝您新年宏图大展。
最长路,最短路,单源路径,所有节点对路径祝您新年路路通畅。
二叉树,红黑树,van Emde Boas树,最小生成树祝您新年好运枝繁叶茂。
最大流,网络流,标准输入流,标准输出流,文件输入流,文件输出流祝您新年顺顺流流。
线性动规,区间动规,坐标动规,背包动规,树型动归为您的新年规划精彩。
散列表,哈希表,邻接表,双向链表,循环链表帮您在新年表达喜悦。 O(1), O(log n), O(n), O(nlog n), O(n^2), O(n^3), O(2^n), O(n!)祝大家新年渐进步步高。
所以如何讲好一个数据结构:让普通人也可以理解,当然还要有运用和实践。基本上《数据结构》这门课程大学时候是放在面向对象之前就有教授的。其实可以把一个结构当作一个“对象”来介绍,如何介绍,有什么属性,有什么操作/功能,操作的时间空间复杂度,应用的场景,生活中的举例。各大算法平台,历届考研真题,如何图解分析,如何debug分析,它的扩展等等。总之有千百种方法来认识,应用,巩固…以达到真正的理解该“对象”
如何写书:
首先,是可以选定一门编程语言的(当然具体到代码可以附录不同编程语言版本),毕竟“纸上得来终觉浅,绝知此事要躬行”,有了语言则可以实践
其次,一个结构该如何讲解,我想了如下一些方面:
- 概念的介绍
- 举例生活的场景
- 认识基础的属性和操作
- 认识java中的该数据结构
- 如何自己手写实现该数据结构
- 一些简单的应用题:比如各算法平台的简单题,考研相关简单题目
- 一些难度较高的应用题
- debug图解一些题目分析
- 和其它数据结构的比较
- 可继续回归到生活如何应用,回归到程序世界什么场景用合适
- 一些扩展,一些此数据结构的故事
- 如何通俗的给外行人讲,是否可以有一些小游戏可以做做
- 最后总结
另外既然是写书,当然应该要有章节,如何循序渐进,如何对比前后,串联起整个章节来也是至关重要的
比如数组和链表介绍了,是否要扩展介绍
- 操作的对比
- 排序的对比
- 场景应用的对比
- 甚至可以继续扩展到hashMap不就有“数据+链表”的实现吗
- …
等等。
总之这是个复杂的事情,需要有取舍,需要想想如何更通俗易懂,且能吸引人。
|