今天终于把《数据结构--C#语言描述》的全稿发给出版社了,出版社还是北京大学出版社,书还是21世纪高职高专系列。书中配套视频也已完成。忙了很长一段时间,终于可以安逸地坐下来再写写博客了。我喜欢那种休闲的生活,高兴的时候坐下来听听歌,看看书。但回想一下却发现这两年过得很紧张,两年两本书,近100集的视频,业余时间几乎都用在这上面了。不过还好,以后又可以享受休闲生活了。
这本书在《C#程序设计基础教程与实训》还没出版时我就已经在构思了。在我的构想中,认为程序设计的学习最少应该经过三个基础阶段:基础语法→面向对象→数据结构,为什么要学习数据结构呢?因为它可以让你站在更高的层次去看待程序;它可以让我们领略先辈大师们的思想精髓。只有基础打牢了,后面进行深入地学习才会得心应手。当初一直想上数据结构这门课,但数据结构教材不少,都是用C或C++写的,有少量用Java描述,就是没看见有用C#写的数据结构书籍。C#也出来不少年了,市面上C#的书籍也有上千本了,但国内居然没有一本用C#描述数据结构的书籍,实在有些想不通。总不能为了上数据结构而多开一门C语言的课程吧(时至今日,我还是认为C语言是最好的入门语言,它可以让你排除一切杂念,专心于程序逻辑及思想。但它的缺点是没有可视化编程,无法吸引学生眼球。以前我们学校开过这门课,但最终还是放弃了。)没办法,只有自已动手,丰衣足食。现在这三个阶段的课程已经差不多完成了,面向对象这个阶段没有成书,因为高职对于基础并不太重视,时间也不允许,只能将它以视频的方式供学生自学了。当然,这一块还没做完,以后慢慢再完成吧。
没写书之前一直怀疑使用C#表述数据结构是否合适,必竟一般情况下它不能直接对内存进行操作。但随着写书的不断深入,这种顾虑完全被打消了,C#是如此优美,简洁,它同样可以完美地展现数据结构的内涵。写书过程中参考了不少数据结构方面的书籍,国内的,国外的,感受是国内这方面的书籍更系统、清晰,表述详细合理,外国的月亮并不一定全比中国的圆。当然代码就没得参考了,幸而C#类库中实现了很多数据结构,而且都写得非常漂亮,就是没有注释,读起来有些困难。
我这本书跟其他的数据结构书籍还是有那么一点点不同的:
1、尽量减少数学公式
当然不是完全抛弃,一些简单的数学公式还是有的,这样做的目的是降低学习数据结构的门槛。看看《算法导论》里的数学公式,这会使很多人没开始学习就已经害怕了,它并不适合高职学生。数学可以精确地描述数据结构,但很多东西不用数学公式一样可以表达,相对于数学来说,思想更加重要,数学不好并不意味着做不了程序员。我们的培养目标是技能型人才,研究工作还是留给研究生和博士吧。
2、抛弃伪代码
伪代码可以简单明了地表述数据结构逻辑,但我更喜欢可运行的代码,它可以让你看到实实在在的结果,也可以通过断点调试、单步运行、修改参数等方式查看数据变化,更进一步地了解数据结构。本书的所有代码均为可运行代码,并且秉承了第一本书的风格,对所有代码进行了详细的注释。
3、配套视频教程
很多人可能感觉数据结构是一门比较难学的课程,但我在这么多年的教学过程中发现,讲算法比讲代码容易多了,只要使用动画的方式演示数据的移动过程再配以一定的讲解,大部份人都可以很轻松地理解算法的思想。 但仅限于思想,至于如何把思想转化为代码我就无能为力了,这只能靠自己。网上有很多数据结构的动画和视频,但动画不配套讲解,很少视频去演示数据的演变过程,难于让人理解。本书的配套视频主要通过动画讲解各数据结构和算法的运算过程,并不讲解代码,所以对于使用其他语言学习数据结构的人也会有一定的帮助。为了能更好地讲解数据结构,我制作了不少动画和程序,很辛苦,贴几个有代表性的出来。
这个是循环队列:
这个是二叉树,设计这个最小面积画树算法花了我不少时间,抓破头皮,几乎绝望的时候突然灵光一闪。。。。。。
本书也介绍了三种画树算法,学习它们对于理解二叉树的本质有很大的帮助。
这个是迷宫问题最短路径算法的PowerPoint动画
这是迷宫问题最短路径程序:
4、深入C#类库进行介绍
C#集合类中实现了很多的数据结构,如果对这些集合类没有深刻的理解,是很难写好程序的。本书抽取了C#中一些常用的集合类,并对核心源码进行了分析。
5、配套完整实验指导和实训指导
这给教师授课省了很多事,实训项目选择了八数码问题,大家还记得第一本书中的拼数字游戏和拼图游戏吧?这个项目就是用电脑求解解题步骤的。使用它还是比较合适的,使用了本书所介绍的很多数据结构。
下面来介绍写书过程中给我留下最深刻印刻的两种数据结构和算法,一个就是KMP算法,一个伟大的算法,个人认为,它是本书中最难的算法。代码非常诡异,区区十数行代码居然包含了如此复杂的逻辑,实在让人汗颜,在此向前辈大师深深地致敬。另一个就是C#中的Dictionary<TKey,TValue>类,第一次读这段代码时让我有拍案叫绝的感觉,实在是太漂亮了,我被她的美所深深折服。感叹自己怎么就想不出这么巧妙的实现呢!当然我也没忘记用程序来展现她的美:
由于是高职高专教材,所以只能介绍那些最基本的数据结构,本书做为数据结构的入门教材还是非常合适的。最遗憾的是没有讲解SortedDictionary,它是红黑树的实现,实在是太过复杂,不适合高职使用。这些高级的数据结构将来我会以博客的方式写出来。
另外本书和第一本书有所不同,不再使用文字介绍例题的界面制作过程,一方面,照着文字做一样可能出错,另一方面界面制作也会占用书本大量空间,所以本书的所有有关界面的制作都放到了视频中,以使读者可以更容易地按照课本代码写出程序。
购买链接:http://product.dangdang.com/product.aspx?product_id=20544747
AVL和红黑树请查看以下网址:
AVL树:
http://www.cnblogs.com/abatei/archive/2008/11/17/1335031.html
红黑树:
http://www.cnblogs.com/abatei/archive/2008/12/17/1356565.html
视频公布了一集,请到以下地址下载: