基本信息
- 作者: (美)Michael McMillan
- 译者: 王群锋 杜欢
- 丛书名: 图灵程序设计丛书
- 出版社:人民邮电出版社
- ISBN:9787115363398
- 上架时间:2014-8-5
- 出版日期:2014 年9月
- 开本:16开
- 页码:200
- 版次:1-1
- 所属分类:计算机 > 软件与程序设计 > 网络编程 > javascript
编辑推荐
随着JavaScript成功走出客户端,在服务器端编程中得到日益广泛的应用,JavaScript程序员需要实现与C#或Java等传统面向对象编程语言相似的数据结构与算法。本书是用JavaScript描述数据结构与算法的开山之作,汇聚了作者多年的实战经验。这本实战指南通过丰富的示例,向读者透彻讲解了在JavaScript环境下,如何通过一系列存储机制(包括链表、栈、队列和图)高效地达到编程目的。
内容简介
计算机书籍
在过去几年中,JavaScript凭借Node.js和SpiderMonkey等平台,在服务器端编程中得到了广泛应用。JavaScript程序员因而迫切需要使用传统语言(比如C++和Java)提供的工具,包括传统的数据结构以及传统的排序和查找算法。《数据结构与算法JavaScript描述》讨论在数组即对象、无处不在的全局变量、基于原型的对象模型等JavaScript语言的环境下,如何实现高效的数据结构和算法。
《数据结构与算法JavaScript描述》适合JavaScript程序员以及对JavaScript语言感兴趣的学习者,特别是在学校中没有系统学习过计算机科学相关课程的“跨界”程序员。
作译者
作为大学老师和程序员,曾编写过多部受到好评的数据结构与算法图书,包括Data Structures and Algorithms Using C#、Data Structures and Algorithms Using Visual Basic.NET,以及其他计算机教程,如Object-Oriented Programming with Visual Basic.NET、C++ Programming: An Introduction、Java Programming Tutorial、Perl from the Ground Up等。Michael现在阿肯色州北小石城普瓦斯基技术学院当讲师,教授计算机信息系统。他还是北小石城阿肯色大学的兼职讲师,教授信息科学。在做讲师之前,他曾是阿肯色儿童医院的一名程序设计师/分析师,负责统计计算和数据分析。
王群锋
1981年生于陕西省富平县桥西大队三里村,2004年毕业于西安电子科技大学。毕业后当了一名程序员,现居西安,在IBM西安研发中心从事下一代统计预测软件的开发工作。
杜欢
淘宝网高级技术专家,2012年加入淘宝,曾就职于雅虎台湾及CISCO。对前端架构、前后端协作有自己的见解,专注于Web产品设计、可用性实施,热爱标准化。
目录
推荐序 XI
前言 XII
第1章 JavaScript的编程环境和模型 1
1.1 JavaScript环境 1
1.2 JavaScript编程实践 2
1.2.1 声明和初始化变量 3
1.2.2 JavaScript中的算术运算和数学库函数 3
1.2.3 判断结构 4
1.2.4 循环结构 6
1.2.5 函数 7
1.2.6 变量作用域 7
1.2.7 递归 9
1.3 对象和面向对象编程 10
1.4 小结 11
第2章 数组 13
2.1 JavaScript中对数组的定义 13
2.2 使用数组 13
2.2.1 创建数组 14
2.2.2 读写数组 15
前言
JavaScript 程序员会发现本书很有用,因为本书讨论了在JavaScript 语言的限制下,如何实现数据结构和算法。这些限制包括:数组即对象、无处不在的全局变量、基于原型的对象模型等。JavaScript 作为一种编程语言,名声有点“不大好”,但是本书展示了如何使用JavaScript 语言中“好的一面”去实现高效的数据结构和算法,进而为JavaScript 正名。
为什么要学习数据结构和算法
我假设本书的读者中,有很多人没接受过正规的计算机科学教育。如果你接受过,那么你已经知道了学习数据结构和算法为何如此重要。如果你没有计算机科学学位或者没有正规学习过计算机科学,那么请耐心读完本节。
计算机科学家尼克劳斯·沃思(Nicklaus Wirth)写过一本计算机程序设计教材,书名是《算法+ 数据结构 = 程序》(Algorithms + Data Structures = Programs,Prentice-Hall)。这个书名就概括了计算机编程的精要。除了“Hello world!”等无关紧要的程序,任何一个有些规模的程序都需要某种类型的数据结构来保存程序中用到的数据,还需要一个或多个算法将数据从输入转换为输出。
对于那些没有在学校学习过计算机科学的程序员来说,唯一熟悉的数据结构就是数组。在处理一些问题时,数组无疑是很好的选择,但对于很多复杂的问题,数组就显得太过简陋了。大多数有经验的程序员都愿意承认这样一个事实:对于很多编程问题,当他们想出一个合适的数据结构,设计和实现解决这些问题的算法就变得手到擒来。
二叉查找树(BST)就是一个这样的例子。设计二叉查找树的目的是为了方便查找一组数据中的最小值和最大值,由这个数据结构自然引申出一个查找算法,该算法比目前最好的查找算法效率还要高。不熟悉二叉查找树的程序员可能会使用一个更简单的数据结构,但效率上就打了个折扣。
学习算法非常重要,因为解决同样的问题,往往可以使用多种算法。对于高效程序员来说,知道哪种算法效率最高非常重要。比如,现在至少有六七种排序算法,如果知道快速排序比选择排序效率更高,那么就会让排序过程变得高效。又比如,实现一个线性查找的算法很简单,但是如果知道有时二分查找可能比线性查找快两倍以上,那你势必会写出一个更好的程序。
深入学习数据结构和算法,不仅可以知道哪种数据结构和算法更高效,还会知道如何找出最适合解决手头问题的数据结构和算法。写程序,尤其是用JavaScript 写程序时,经常需要权衡,知道了本书涵盖的数据结构和算法的优缺点,在解决具体的编程问题时就容易做出正确的选择。
阅读本书需要的工具
本书使用的编程环境是基于SpiderMonkey JavaScript 引擎的JavaScript shell。第1 章提供了该shell 的下载说明。也可以使用其他一些JavaScript Shell,比如Node.js 提供的JavaScript shell,你只需自己对书中的程序做一些转换,就能在Node.js 上运行。除了JavaScript shell,再有一个用于编写JavaScript 程序的文本编辑器就够了。
本书组织结构
第1 章简单概述JavaScript 语言,至少介绍了本书用到的JavaScript 特性。这一章还展示了贯穿全书的编程风格。
第2 章讨论计算机编程中最常见的数据结构:数组。数组是JavaScript 原生的数据类型。
第3 章介绍我们实现的第一个数据结构:列表。
第4 章介绍栈。栈是一种贯穿计算机科学的数据结构,编译器和操作系统的实现都用到了栈。
第5 章讨论队列。队列是对你在银行或杂货店里所排队伍的一种抽象。队列广泛应用于处理数据之前,必须先把数据按顺序排成一队的模拟软件中。
第6 章介绍链表。链表是对列表的修改,链表里的每个元素都是一个单独的对象, 该对象和它两边的元素相连。当程序中需要插入和删除多个元素时,使用链表非常高效。
第7 章展示如何实现和使用字典,字典是将数据存储为键值对的数据结构。
实现字典的一种方法是通过散列表,第8 章讨论了如何实现散列表和在表中存储数据的散列算法。
序言
实际上,算法是一个十分宽泛的概念,我们写的任何程序都可称为算法,甚至往冰箱里面放一头大象,也要经过开门、放入、关门这样的规划,这也可以视为一种简单的算法。可以说,简单的算法是人类的本能。而算法知识的学习则是吸取前人的经验,对复杂的问题进行归类、抽象,帮助我们脱离刀耕火种时代,系统掌握算法的一个过程。
随着自身成长和职业发展,不论是做前端、服务端还是客户端,任何一个程序员都会开始面对更加复杂的问题,算法和数据结构知识就变得不可或缺了。
我一直认为前端工程师则是最需要重视算法和数据结构基础的人。因为历史原因,不少前端工程师是从视觉设计、网站编辑转过来的,在学校没有学过相应的基础课程,而数据结构与算法的经典名著大部分又没照顾到入门的需要,所以前端工程师如果自身不重视算法和数据结构这样的基础知识,很可能陷入数年从事单一重复劳动毫无成长这样的职业发展困境。在移动浪潮到来之后,用户体验要求越来越高,对前端提出了更高的要求,前端这个职能,必须提高自身才能继续发展,未来的网页UI,绝对不是靠几个选择器操作加超链接就能应付的。越来越复杂的产品和基础库,需要坚实的数据结构与算法基础才能驾驭。
本书对前端工程师是非常好的数据结构与算法入门书,它的难度非常适合前端工程师补习基础知识。全书仅200页,对于有渴求数据结构与算法的前端工程师来说这是非常不错的开始。特别值得一提的是每章后面的小练习,题目不多但是非常有可操作性。
程劭非
阿里无线事业部高级技术专家
2014年7月
媒体评论
——程劭非,阿里无线事业部高级技术专家