本文由恋花蝶最初发表于:http://blog.csdn.net/lanphaday和http://lanphaday.bokee.com,转贴请保留这一声明,谢谢。

雷声大,雨点小

《多任务下的数据结构与算法》初印象

这本书是今天当当网送到的,看了前面二十页,已经激动得非写下点东西不可了。

这本被冠之以国内第一本原创多任务下的数据结构与算法图书之名的书籍的确吸引了我的眼球,并在我能做到的第一时间在当当网买了下来,读来二十页后,不得不说:大失所望!

作者周伟明,我在网络上找不到更多关于他的信息,因为同名的人太多。所以这篇短文所说的都是针对于这本书而言,事先声明一下。因为我要批评这本书,肯定是会被很多人拿砖头过来拍我的;原因是就目前而言,我在网上看到的都是说这本书好、推荐这本书的网页。

根据第二书店的网页(http://www.dearbook.com.cn/2006/data/index.htm)介绍,“本书在传统数据结构与算法的基础上,提出了许多新的思想概念和设计方法,重点介绍了如何使数据结构与算法支持多任务;还介绍了复合数据结构与动态数据结构的设计,并对商业应用实例进行分析讲解。”因为还没有读完整本书,不敢对上而的说法作反驳,现在只根据已经阅读的前二十页谈谈自己的想法。

第一、   这本书作者说得太满了。很多方面作者提出自己的见解是无可厚非的,但多处把话题说死。比如第2页关于STL的讨论之一是说模板库的内存开销大,在内存受限系统中不合适,实在太过荒唐。举个例子,实现Max函数比较两个对象,用C的话因为要适应各种数据结构要做出N个不同的版本,编译之后占用多大内存?用C++的话,只要写一个模板函数然后依要求特化即可。甚至C语言版本在比较自定义数据结构的时候还需要写一个比较函数,而C++只要写一个重载了操作符的函数对象即可,连函数调用的开销都省下了。不知道C++占内存更大的观点从何而来?又如在第3页关于参数校验方面的论述,作者说对于需要在大的循环里调用的函数,不需要要函数内对参数进行校验;在列表的遍历函数。这句话我不敢苟同,把自己的函数执行的正确性依赖在调用者身上,正是与软件工程里高内聚低偶合的原则相抵触的,而且放眼当前流行的程序库,尚未见哪个是这样设计的。

第二、   这本书作者的个人经验太多,很多东西没有拿出来大家讨论是否合适就写到书中去了。比如第5页关于switch和if…else的论述,作者举的例子实现太不合适了。不知道有哪个程序员会在那种情况下使用switch语句来实现?恐怕连最初等的初学者都懂得那应该用if…else来实现吧?又如第5页谈及goto语句时说“从多重嵌套的循环判断里跳出去就是不允许的。”我看过很多论及goto语句的言论,与作者相反,大家都是认为从多重嵌套中直接跳出有利于程序的清晰性,还有,如果不允许goto跳出多重循环,不知道goto还有哪些更充足的理由存在?

第三、   这本书有不少错误。比如第20页实现的Stact_Pop函数,用以弹出栈顶元素并在当栈为空的时候返回NULL。这个函数是有设计错误的,当我在里面存储的数据包含一个NULL指针时,我不知道根据返回值怎么去判断我的弹出操作是成功还是成败了?一个改进的方法就是返回两个值,一个是数据指针一个是操作状态。还有在第24页里定义队列时说“…栈是后进先出,而队列的进出方向刚好和栈相反。”不知道作者所言的方向是指什么?根据上下文,应该是说栈是FIFO,栈是FILO吧?但也没有相反之说啊?还有回到2.1.2节的栈的实现上去,当栈满的时候,作者的设计是增加一倍空间,且不说使用realloc函数造成的效率损失,这种只增不减的设计在内存的浪费问题上应该被BS的!我相信作者在实际工作中不会采用这样的设计,这只是作为书中的例子做了简化,但你既然简化了内存组织方式,那就不应该再实现当栈满时自动增加栈空间的功能!栈满直接返回操作失败即可。其它诸如“栈是一种最常用的操作,…”(第17页)、“…这样实现起来可以充分利用数组操作的高效性,避免移动数据。”(第18页)就不一一枚举了。

第四、   作者对自己不算纯熟的领域大放厥词。在第14-15页,作者在名为软件设计简介的章节里大谈自己对软件工程的见解,而且海吹胡擂,为软件开发划分了结构化和面向对象两个阶段,并对COM等横加指责,安名加罪。作者甚至断言在“…软件设计发展的第三阶段才能彻底解决。”他自创了宏观设计学和微观设计学两个“重要”理论,这样的论调,对于广大的程序员,特别是一些初学程序开发的学生是有害的、是不负责任的胡说。

第五、   作为一本论述数据结构与算法的书籍,没有设计一些跨平台的自己的程序库是非常失败的。这本基于Windows内部互斥量、事件的数据结构与算法书,把读者的思维禁锢在一个平台之上,而数据结构与算法却是计算机科学里最最平台语言无关的学科,这一点,未免让人大失所望。

这本书现在为止,读的只有这么二十余页,但我觉得已经非常失望了。当然,这怪不得作者,从字里行间我依然可以感受到作者非常用心想把自己所学所感所悟传导给大家,作者的心是热切的,但可能作者因为工作原因(比如不方便举出更详尽的例子和实际应用中的例子)和时间原因(作者已经伏案十年写下此书)而不得不为之删减吧!这本书,对于广大的有一定经验的程序员和正在成长中的程序员是有好处的,可以买来一看,只要看的时候取精去糙,相信仍会收获不小。但还处于学习期的大学生和广大初学者就不要看了罢,恐怕对你们有造成一些不良影响。

附:我这样写,肯定是有很多人要拍砖的,所以我开放了blog的评论功能,希望大家心平气和地就事论事。

雷声大,雨点小——《多任务下的数据结构与算法》初印象相关推荐

  1. python 下的数据结构与算法---6:6大排序算法

    顶先最后推荐:哈哈,意思是放到顶部强调其重要性,但是应该我总结的六种算法看完了后再看的一篇醍醐灌顶的文章 一:冒泡排序(Bubble Sort) 原理:假设有n个数,第一轮时:从第一个元素开始,与相邻 ...

  2. 数据结构大作业_聊聊我的数据结构与算法课

    在这样一个天天见证历史的特殊学期,地空数算2020结束了. 从秋季学期开始,计算概论B和数据结构与算法B都将纳入公共计算机基础课的轨道,全校理科生统一选课.统一大纲.统一时间.统一上机.统一考评. 虽 ...

  3. labuladong的算法小抄_学习数据结构和算法的框架思维

    ----------- 通知:如果本站对你学习算法有帮助,请收藏网址,并推荐给你的朋友.由于 labuladong 的算法套路太火,很多人直接拿我的 GitHub 文章去开付费专栏,价格还不便宜.我这 ...

  4. python树结构实现小顶堆_数据结构和算法入门之小顶堆和大顶堆Python实现

    首先简单提一下小顶堆和大顶堆,其本质是一颗完全二叉树,不同点在于:除叶子节点外,小顶堆的每个父节点的key都要比其左右两个子节点的key小:大顶堆的每个父节点的key都要比其左右两个子节点的key大. ...

  5. 刘强东的“百亿补贴” 被指“雷”声大雨点小

    京东集团2022年财报显示,2022年第四季度京东收入为2954亿元,同比增加7.1%,与2021年四季度23%的同比增速确有不小的差距.前三季度对应的同比增速分别为17.95%.5.44%和11.3 ...

  6. 杰理之通话 远端 手机听到声音忽大忽小【篇】

    1.把 AEC 算法关掉,用苹果手机录音,看录制出的原始音频是不是本身就有电流声.高频干扰声或其他很 大的异常噪音.如果出现这些异常声音,则必须先处理掉这些声音,再去测试远端声音忽大忽小问题.因为 如 ...

  7. 数据结构排序算法实验报告_[数据结构与算法系列]排序算法(二)

    我的上一篇文章向大家介绍了排序算法中的冒泡排序.插入排序和选择排序.它们都是平均时间复杂度为 O(n^2) 的排序算法,同时还为大家讲解了什么是原地排序和什么是排序的稳定性.下图是这三种算法的比较,不 ...

  8. 数据结构与算法笔记总结

    学习资源推荐: 1.程序员面试.算法研究.编程艺术.红黑树.机器学习5大系列集锦 程序员面试.算法研究.编程艺术.红黑树.机器学习5大系列集锦_v_JULY_v的博客-CSDN博客 2.推荐!数据结构 ...

  9. 数据结构和算法(Java),上

    文章目录 第1章 数据结构和算法的概述 数据结构和算法的关系 线性结构和非线性结构 线性结构 非线性结构 第2章 稀疏数组和队列 稀疏数组 案例引入 稀疏数组的基本介绍 应用实例 队列 队列介绍 数组 ...

最新文章

  1. Python,OpenCV提取图片中的多个茄子种子轮廓,并按从左到右排序后显示
  2. bzoj 2565: 最长双回文串 manacher算法
  3. -bash: sz: command not found
  4. WeChat微信小程序网易云音乐播放链接方法
  5. JS实现数组去重(重复的元素只保留一个)
  6. $(document).ready() 和 window.onload 的区别
  7. “约见”面试官系列之常见面试题之第七十九篇之ES5和ES6(建议收藏)
  8. Sparta(斯巴达)——信息收集扫描爆破集成
  9. (转)JS事件循环和宏任务和微任务
  10. Unity射线检测整理
  11. linux kvm usb设备,KVM使用USB设备的方法
  12. java存根_Java方法存根
  13. 历史类:古希腊与亚历山大帝国
  14. python爬取5442网站图片
  15. 提取win10 锁屏壁纸
  16. ZKT门禁机标准联接线(按键开关经过卡机)
  17. addEventListener 的event事件列表
  18. uiautomator2+python3,实现手机解锁,以及软件登录
  19. 几款好用的矢量图库网站
  20. Hadoop集群启动后利用Web界面管理HDFS

热门文章

  1. linux5.8抓包,Linux 抓包工具 tcpdump
  2. java 调用s3 ip 端口,AWS S3 接口调用
  3. 松下A6伺服驱动器X4端子50Pin针引脚说明
  4. EasyNLP 开源中文 NLP 算法框架
  5. php昵称库,php压缩图片类,用gd库函数,吸取网上前辈精华加自己修改
  6. 我有一只猫,名字叫做狗.还有一只狗,名字叫做猫
  7. Activity、Window、DecorView、ViewRootImpl之间的关系
  8. 【译】推荐你使用Vim的三个半理由
  9. ArcGIS坐标系篇之几种常见坐标系的相互转换(二)
  10. 什么叫行业最佳实践?