不知道大家第一次接触到严蔚敏老师的数据结构那本书最大的感受是什么,我感觉书中最大的特点之一就是使用伪代码来描述数据结构和算法,让我头大万分。
今天借这个机会说一说自己的感受 。
书中说它所采用的伪代码是:类C语言 = C语言的一个核心子集 + C++的引用,而且这种类C语言还不拘泥于C语言的细节。所以,这就意味着什么?意味着:书的作者可以不按套路出牌。如果您按照书中的例子,将代码一行一行的输入到源文件,然后用C编译器去编译他,不一定能通过。这个时候,读者可能就会吐下槽:为什么作者不把例子用完全编译通过,运行无bug的C代码实现放在书上呢?还要我们自己去一行一行转换,一不小心还会踩到地雷?可能因为作者以为读者已经学过C语言并且具备了这种能力的实力。但其实作者在第一章做了一些说明。


这样的写法无形中增加了阅读代码的困难。问题来了,伪代码有一定的书写标准吗?答案:没有。你认为好,那就是好。但实际上就一定好吗?一千个人,一千种写法。好不好,最后付诸实践的时候,还是看评价试卷的老师,给分就是好,不给分或扣分就是不好。举一个例子,C语言的数组一般是从0开始,但是有些伪代码从1开始,那我写的伪代码从5开始,给不给分?
伪代码的好处就是写起来可以偷懒(但实际上出来混也总是要还的),交流方便;坏处就是没有标准,容易产生二义性。所以,我们到底应该以什么标准写呢?后来,我问老师数据结构期末考试时究竟要用伪代码写算法还是用C语言?老师说:只要题目中没有明确要求,都可以。后来又加了一句:一般考试题目中都不会有要求。接着又问老师:一定要跟严蔚敏的伪代码语法一致吗?老师说:不一定,把算法表达清楚即可。我本来想继续问一下老师:伪代码这个理论上实在太多写法了啊?无穷无尽啊?万一老师看不懂这种写法,不就悲催了吗?怎么整啊?emmm不过,看到大家都没问,我也没好意思问。再后来,苦思冥想了一下,犯不着跟自己较劲儿,考试就都用C来实现吧,肯定没毛病。如果公司面试算法,大概都会让你用一种语言实现吧,很少会要求写伪代码吧。
吐槽一句,书的名字《数据结构(C语言版)》,嘶认为并不合适,不如叫:《数据结构(类C语言描述)》更加准确。,大家可以到当当网搜索一下清华大学 殷人昆 老师编著的《数据结构(C语言版)》,他在此书的前言提出了一些不同的见解。

“早期用伪代码描述,实践证明不可持续,因为很多用伪代码描述的算法转换为使用某种编程语言编写的程序后,怎么也通不过。原因是很多人编程语言的实践能力太差,算法的实现细节太粗糙。所以我认为,使用某种过程性语言,如C 等,对于学习和实现数据结构与算法是合适的。”
学校也应该与时俱进,更改一下教材用书,而不是20年都不变一次,让学生入门都难,怎么发展自己。

数据结构的那些“事”相关推荐

  1. 数据结构和算法 | 第一部分第一课:什么是数据结构和算法

    作者 谢恩铭,公众号「程序员联盟」. 转载请注明出处. 原文:https://www.jianshu.com/p/b2f23799a5bb 内容简介 前言 什么是算法 算法无处不在 计算机的" ...

  2. Python三种数据结构

    Python 为我们提供了三种常用数据结构,列表(Lists),字典(Dictionary),元组(Tuple).为何要了解三种数据结构,这事的意义就不必多说了,让我们开始了解这三种最重要的数据结构吧 ...

  3. 备份CSDN博客正文到本地存档

    大哥有了新想法,然而没有技术,令人欣慰的是大哥想到了我,于是我便答应免费帮个忙,这是一个基于云的项目,具体细节也就不透露了,然而在实现的过程中,其中一个模块我觉得可以自用,于是我就想把这个模块抽出来, ...

  4. 【关于封装的那些事】 缺失封装 【关于封装的那些事】 泄露的封装 【关于封装的那些事】 不充分的封装 【图解数据结构】二叉查找树 【图解数据结构】 二叉树遍历...

    [关于封装的那些事] 缺失封装 目录 - 缺失封装 为什么不能缺失封装? 缺失封装潜在的原因 未意识到关注点会不断变化 混合关注点 幼稚的设计决策 示例分析一 示例分析二 总结 缺失封装 没有将实现变 ...

  5. 数据结构那些事(二)

    上篇数据结构那些事(一)已经介绍了数组,列表和栈.这篇我们将介绍队列,链表,字典. 队列也是一种列表,遵循先进先出的规则. 队列的两种主要操作是:向队列中插入新元素和删除队列中的元素.入队操作在队尾插 ...

  6. 数据结构-队列和栈的那些事(三)

    一.队列和栈 什么是队列?队列是一种只能在一端插入,另外一端删除的有序线性表,队列中第一个插入也就第一个被移除,所以队列是一种先进先出的线性表: 什么是栈?栈是一种有序线性表,只能在表的一端进行插入和 ...

  7. mongo存储引擎那些事(一):硬盘数据结构

    目录 LSM Tree WireTiger引擎基本数据结构 wiredtiger引擎定义的磁盘数据结构 插入多条数据后 作为了一个从事了7-8年开发经验的老coder,之前接触的数据库都是关系型数据库 ...

  8. 高级数据结构讲解与案例分析

    然而,仅仅掌握好它们不足以应付大厂的算法面试的.为了达到对时间和空间复杂度的理想要求,本节课探究高级数据结构,它们的实现要比那些常用的数据结构要复杂得多.其中重点介绍: 优先队列 图 前缀树 线段树 ...

  9. Python3-Cookbook总结 - 第一章:数据结构和算法

    第一章:数据结构和算法 Python 提供了大量的内置数据结构,包括列表,集合以及字典.大多数情况下使用这些数据结构是很简单的. 但是,我们也会经常碰到到诸如查询,排序和过滤等等这些普遍存在的问题. ...

最新文章

  1. java MD5 加密
  2. MATLAB使用方法和程序设计,实验1 MATLAB使用方法和程序设计
  3. vsftp的安装或升级
  4. PyTorch : torch.nn.xxx 和 torch.nn.functional.xxx
  5. visual studio 的各个版本下载地址
  6. mysql工作台安装使用_如何安装MySQL工作台?
  7. 解决浏览器无法登陆pki问题,删除浏览器缓存
  8. python ini
  9. 找不到可安装的ISAM
  10. MongoDB 之聚合函数查询统计
  11. MySQL驱动jar包的下载--保姆教程
  12. 美国11月PMI现回落 市场关注10月PCE通膨数据
  13. 工作态度决定了工作结果
  14. 微信公众号刷票思路 Python
  15. 离线数仓DIM层和DWD层,联表后表和字段命名规则
  16. Nide.js安装配置
  17. Revit SDK 介绍:API Sketched Winder Stairs 创建扇形踏步楼梯
  18. 黑客为“炫技”随机攻击,结果被“顺着网线”抓了
  19. 个人收款码和个人经营收款码的区别,你知道吗
  20. 【Unity3D】Unity 组件 ④ ( 摄像机 | 调整摄像机 | 手工调整 | 3D 视图对齐 Align with View 调整摄像机 )

热门文章

  1. 用QQ域名邮箱配置发信服务
  2. babylonjs代码解读
  3. JAVA实现矩阵连乘
  4. 2018今日头条秋招 笔试 (2017/09/10)
  5. 如何获得U盘的详细信息
  6. vue + vtkJs + itkJs进行dcom影像预览
  7. 《Combining 3D Morphable Models: A Large scale Face-and-Head Model》翻译
  8. 秒杀系统的技术挑战、应对策略以及架构设计总结一二!
  9. 公众平台新增修改文章错别字功能 每篇文章允许被修改一次仅限正文内五个字...
  10. RTSP 流媒体协议