基本信息
- 作者: (美)萨特吉·萨尼(Sartaj Sahni)
- 译者: 王立柱,刘志红
- 丛书名: 计算机科学丛书
- 出版社:机械工业出版社
- ISBN:9787111496007
- 上架时间:2015-4-16
- 出版日期:2015 年4月
- 开本:16开
- 页码:544
- 版次:2-1
- 所属分类:计算机 > 计算机科学理论与基础知识 > 数据结构
教材

编辑推荐
是享有盛誉的数据结构教科书的第2版。
它完整地包含了基本数据结构的内容,是CS2课程的理想用书。
内容简介
作译者
目录
出版者的话
译者序
前言
第一部分 预备知识
第1章 C++回顾 2
1.1 引言 2
1.2 函数与参数 3
1.2.1 传值参数 3
1.2.2 模板函数 4
1.2.3 引用参数 4
1.2.4 常量引用参数 5
1.2.5 返回值 5
1.2.6 重载函数 6
1.3 异常 7
1.3.1 抛出异常 7
1.3.2 处理异常 7
1.4 动态存储空间分配 9
1.4.1 操作符new 9
1.4.2 一维数组 9
译者序
Data Structures, Algorithms, and Applications in C++, Second Edition
数据结构和算法是计算机科学和工程的基础。它们的相互联系和作用是程序的本质,Nicklaus Wirth把它们表示为:算法+数据结构=程序。Sartaj Sahni博士的《数据结构、算法与应用——C++语言描述》一书是彰显这一本质的当代经典,这主要表现在五个方面:
1)每一种数据结构和算法设计不仅都用C++语言优美地实现了,而且与C++标准模板库所使用的结构在相似性或同一性上保持兼容,既纯粹又规范。
2)对程序性能的分析和测量系统而严谨,既有严格的数学分析,又有周密的实验测量。
3)几乎每一种数据结构和算法都是从多个应用实例中分析和抽象出来的,既可以拓宽应用领域知识,又可以提高学习兴趣。
4)一个典型的应用实例常常用多种数据结构和算法来实现,既丰富了程序设计经验,又在比较中提高了鉴别能力。
5)练习题丰富。本书及其网站共有800多道练习题,而且和教材正文中的示例代码相辅相成。这些练习题趣味多样且难易相济,可满足各层次读者的需求。
如果你是一名程序设计新手,本书是你拾级而上的阶梯;如果你是一名专业程序设计者,本书是你高屋建瓴的楼台;如果你是在校大学生,本书是你学习数据结构和算法的理想教材或参考书。
对中国学生来说,本书的意义还可以从更高的层次来认识。爱因斯坦认为,西方科学的发展是以两个伟大的成就为基础的:形式逻辑体系和实验体系。今天的计算机科学不仅是这两个成就的综合体现,而且深入社会的每个角落,时刻改变着我们的生活,使每一个人时刻感受到它的力量。数据结构和算法作为计算机科学和工程的核心,可以使更多的中国学子通过这门课程而更积极、更有效地掌握形式逻辑和实验方法。但是长期以来,我国的教材大都使用伪码来描述数据结构和算法,给教学和自学带来极大的困难。因为代码不落实,实验测量就无法进行;没有实验测量,单凭分析就没有可靠的结果(例如高速缓冲存储器对运行时间的影响是不能只靠分析得到的);分析没有结果,就容易流于形式,以至于理论和实践脱节,成为概念的灌输。这正是Stroustrup在《C++程序设计原理与实践》一书的前言中所批评的学习模式:先学习一个月的理论知识,然后看看是否能使用这些理论。
Sartaj Sahni博士的力作如阳光和雨露照耀和滋养我们,它从五个方面引导我们走上精神探险的旅程,饱览西方科学成就中美丽璀璨的风景,尽情品尝科学智慧中一种鲜美甘甜的果实:数据结构与算法。
王立柱
2014年10月于天津
前言
对数据结构和算法的研究是计算机科学和工程的基础。精通这方面的知识,对开发能够有效利用计算机资源的程序是必不可少的。因此,所有计算机科学和工程专业都有一门或几门课程专门用来讲授这方面的内容。一般来说,第一门程序设计课程介绍数据结构和算法的基础知识(数据结构的栈和队列,算法的排序和矩阵运算)。第二门程序设计课程介绍数据结构和算法的系统知识。随后,可以对数据结构和算法进行深入的研究,这通常需要一门或两门课程。
计算机科学和工程的本科专业课程过多,已经迫使很多高等院校进行课程整合。例如,在佛罗里达大学,给本科生只开设一学期的数据结构和算法的课程。在学习本课程之前,要求学生已经学过一学期的Java程序设计和离散数学。
本书既可以用于两门或更多的专门研究数据结构和算法的课程,也可以用于相关的一门综合课程。全书共分三个部分。第一部分从第1章到第4章,旨在复习C++程序设计的概念以及程序性能的分析和测量方法。对于熟悉C语言程序设计的学生,通过学习第1章应该能够过渡到C++。第1章虽然不是C++的入门知识,但是依然包含了C++的一些基本概念,这些概念常令学生感到困惑,如参数传递、模板函数、动态存储分配、递归、类、继承、异常的抛出和捕捉。第2章和第3章复习了程序性能的分析和测量方法——操作计数、执行步数和渐近符号(大O、Ω、Θ,小o)。第4章复习了程序性能的实验测量方法,还简要地讨论了高速缓冲存储器对运行时间测量的影响问题。第2章通过程序性能分析方法的应用,深入研究了在程序设计入门课程中遇到的典型的基础性算法:简单的排序算法(冒泡排序、选择排序、插入排序和计数排序),顺序搜索,利用Horner法则进行多项式求值,矩阵运算(矩阵相加、矩阵转置、矩阵相乘)。第3章研究了二分搜索算法。尽管第2章到第4章的主要目的是学习程序性能的分析和测量方法,但是也让学生精通了一组基本算法。
本书第二部分从第5章到第16章,深入研究了数据结构。第5章和第6章分别研究了数据的数组描述方法和指针(或链式)描述方法,构建起数据结构研究的框架。这两章用这两种数据描述方法来创建C++类,以描述线性表数据结构。我们通过实验数据对不同的数据描述方法在描述线性表时的性能进行了比较。第二部分从第7章以后都是应用第5章和第6章的描述方法来描述其他的数据结构,如数组和矩阵(第7章)、栈(第8章)、队列(第9章)、字典(第10、14和15章)、二叉树(第11章)、优先级队列(第12章)、竞赛树(第15章)和图(第16章)。
本书在处理数据结构时,试图做到与C++标准模板库(STL)所使用的结构在相似性或同一性上保持兼容。例如,第5章的线性表数据结构便是按照STL的类vector的模式而建立的。本书通篇都利用了STL的函数,诸如copy、min和max,学生由此会熟悉这些函数。
本书第三部分从第17章到第21章,研究常用的算法设计方法。这些方法有贪婪算法(第17章)、分而治之算法(第18章)、动态规划(第19章)、回溯算法(第20章)和分支定界算法(第21章)。另外还包括两种下限的证明(最小最大问题和排序问题)(18.4节)、机器调度的近似算法(12.6.2节)、箱子装载算法(13.5节)和0/1背包问题(17.3.2节)。12.6.2节还简略地介绍了NP-复杂问题。
本书的一个特色是强调应用。书中的每一种数据结构和算法设计都通过多个应用实例来演示。通常每一章的最后一节都针对本章介绍的数据结构或设计方法给出具体的应用。很多时候,在一章的前面几节也包含一些应用实例。这些应用实例涉及多个方面——排序(冒泡排序、选择排序、插入排序、计数排序、堆排序、归并排序、快速排序、箱子排序、基数排序和拓扑排序);矩阵运算(矩阵加法、矩阵转置、矩阵乘法);电路设计自动化(搜索电路网组、电路布线、元件折叠、开关盒布线、设置信号放大器、交叉分布、电路板排列);压缩编码(LZW压缩、霍夫曼编码);计算几何(凸包和最近点对);仿真(工厂仿真);图像处理(图元标注);趣味数学(汉诺塔、残缺棋盘、迷宫老鼠);调度(LPT调度);优化(装箱问题、货箱装载、0/1背包、矩阵乘法链);统计(直方图、寻找最大值和最小值、寻找第k个最小值);图论(生成树、图元、最短路径、最大完备子图、二分覆盖和旅行商)。研究这些应用实例不需要学生具有相关领域的预备知识,因为本书包含了这些知识,而且这些知识会提高学生的学习兴趣。
我们希望通过把实际应用与数据结构和算法设计方法的基础研究紧密结合,能够激发学生更大的专业兴趣。学生通过完成本书和本书网站的800多道练习题,知识将会更加丰富和牢固。
网站
本书网站的URL为http://www.cise.ufl.edu/~sahni/dsaac。
访问该网站可以得到本书的所有程序以及示例数据和输出结果。示例数据并不是特意设计的测试数据,而是用来运行程序以便将输出结果与给定的输出结果进行比较的数据。网站还有每一章的练习答案、一些测试样本以及相应的测试结果、补充的应用实例和对书中一部分内容的进一步讨论。
如何使用本书
使用本书讲授数据结构和算法可以采用多种课程安排,这需要教师根据学生的知识背景、对应用的侧重程度和课时的多少来决定。下面是几种可能的课程安排方案。我们建议学生的作业是编写和调试一些程序,开始是一些小程序,随着课程的深入,程序逐渐复杂。学生应该根据课堂讲授的内容,同步阅读本书的相关内容。
两季度课程安排——第一季度
(一周回顾,数据结构和算法内容系列)
周 主题 阅读
1 回顾C++和程序性能 第1~4章,布置作业1
2 基于数组的描述 第5章,完成作业1
3 链表描述 6.1~6.4节,布置作业2
序言
Data Structures, Algorithms, and Applications in C++, Second Edition
文艺复兴以来,源远流长的科学精神和逐步形成的学术规范,使西方国家在自然科学的各个领域取得了垄断性的优势;也正是这样的优势,使美国在信息技术发展的六十多年间名家辈出、独领风骚。在商业化的进程中,美国的产业界与教育界越来越紧密地结合,计算机学科中的许多泰山北斗同时身处科研和教学的最前线,由此而产生的经典科学著作,不仅擘划了研究的范畴,还揭示了学术的源变,既遵循学术规范,又自有学者个性,其价值并不会因年月的流逝而减退。
近年,在全球信息化大潮的推动下,我国的计算机产业发展迅猛,对专业人才的需求日益迫切。这对计算机教育界和出版界都既是机遇,也是挑战;而专业教材的建设在教育战略上显得举足轻重。在我国信息技术发展时间较短的现状下,美国等发达国家在其计算机科学发展的几十年间积淀和发展的经典教材仍有许多值得借鉴之处。因此,引进一批国外优秀计算机教材将对我国计算机教育事业的发展起到积极的推动作用,也是与世界接轨、建设真正的世界一流大学的必由之路。
机械工业出版社华章公司较早意识到“出版要为教育服务”。自1998年开始,我们就将工作重点放在了遴选、移译国外优秀教材上。经过多年的不懈努力,我们与Pearson,McGraw-Hill,Elsevier,MIT,John Wiley & Sons,Cengage等世界著名出版公司建立了良好的合作关系,从他们现有的数百种教材中甄选出Andrew S.Tanenbaum,Bjarne Stroustrup,Brain W.Kernighan,Dennis Ritchie,Jim Gray,Afred V.Aho,John E.Hopcroft,Jeffrey D.Ullman,Abraham Silberschatz,William Stallings,Donald E.Knuth,John L.Hennessy,Larry L.Peterson等大师名家的一批经典作品,以“计算机科学丛书”为总称出版,供读者学习、研究及珍藏。大理石纹理的封面,也正体现了这套丛书的品位和格调。
“计算机科学丛书”的出版工作得到了国内外学者的鼎力相助,国内的专家不仅提供了中肯的选题指导,还不辞劳苦地担任了翻译和审校的工作;而原书的作者也相当关注其作品在中国的传播,有的还专门为其书的中译本作序。迄今,“计算机科学丛书”已经出版了近两百个品种,这些书籍在读者中树立了良好的口碑,并被许多高校采用为正式教材和参考书籍。其影印版“经典原版书库”作为姊妹篇也被越来越多实施双语教学的学校所采用。
权威的作者、经典的教材、一流的译者、严格的审校、精细的编辑,这些因素使我们的图书有了质量的保证。随着计算机科学与技术专业学科建设的不断完善和教材改革的逐渐深化,教育界对国外计算机教材的需求和应用都将步入一个新的阶段,我们的目标是尽善尽美,而反馈的意见正是我们达到这一终极目标的重要帮助。华章公司欢迎老师和读者对我们的工作提出建议或给予指正,我们的联系方法如下:
华章网站:www.hzbook.com
电子邮件:hzjsj@hzbook.com
联系电话:(010)88379604
联系地址:北京市西城区百万庄南街1号
邮政编码:100037
媒体评论
书中的应用实例是它的特色。Sahni博士为每一个数据结构和算法都提供了若干个应用实例,涉及排序、压缩编码和图像处理等多个方面。这些实例把概念和应用结合在一起,使理论与实践统一,从而让概念容易理解,使学生增加学习动力和兴趣。
本书采用的实用教学方法,不仅充实了理论概念,而且大量的习题让学生有了实践机会(书中有800多道练习题,包括理解题和简单的编程题和工程设计题)。除此之外,本书的配套网站上包含书中的所有程序、示例数据、运行结果、部分练习的解答和带有结果的示例测试。
作者简介
Sartaj Sahni 是一位杰出的教授,佛罗里达大学计算机与信息科学工程系主任,欧洲科学院院士, 美国电气和电子工程师协会(IEEE)、 美国计算机协会(ACM)、美国科学促进会(AAAS)和明尼苏达超级计算机研究所的成员,坎普尔印度理工学院(IIT)的杰出校友。Sahni博士获得1997年IEEE计算机分会的Taylor L.Booth教育奖,2003年IEEE计算机分会的W.Wallace McDowell奖和2003年ACM的Karl Karlstrom杰出教育家奖。他在坎普尔印度理工学院获得电子工程学士学位,在康奈尔大学获得计算机科学硕士和博士学位,发表过250多篇论文,编写了15本教科书,研究成果所涉及的领域包括有效算法的设计与分析、并行计算、互联网、自动化设计和医用算法。