程序设计导论:Python语言实践
作者 : [美] 罗伯特·塞奇威克(Robert Sedgewick) 凯文·韦恩(Kevin Wayne) 罗伯特·唐德罗(Robert Dondero) 著
译者 : 江红 余青松 译
丛书名 : 计算机科学丛书
出版日期 : 2016-11-14
ISBN : 978-7-111-54924-6
定价 : 79.00元
教辅资源下载
扩展信息
语种 : 简体中文
页数 : 535
开本 : 16
原书名 : Introduction to Programming in Python: An Interdisciplinary Approach
原出版社: Pearson Education Asia
属性分类: 教材
包含CD :
绝版 :
图书简介

该书从可访问的和跨学科的角度入手,强调应用,介绍Python的最有用的功能,编程的基本要素、功能、模块、面向对象编程和数据抽象对象、算法与数据结构,融汇了作者丰富的课堂教学经验,提供了大量源代码、I/O库和精选实例。适合作为计算机专业的学生作为编程语言的教材。

图书特色

学习编程是每个科学和工程专业学生教育的重要部分,是了解计算机科学本质的第一步。本书的目的是在科学环境中为需要编程或想学习编程的人们讲授程序设计的基本方法和应用技巧。
Python编程语言是理想的第一门程序设计语言,本书所有程序都是使用Pyhton编程语言来编写的。本书讲授了多种解决计算机问题的基本技能,这些技能可以应用于现代计算环境中。
相对于传统的CS1课程而言,本书提供一种跨学科的方法,并强调一种基本思想,即当今世界中,数学、科学、工程和计算紧密结合。本书重点强调许多重要的相关应用,为读者提供了所需的工具,以帮助他们体会程序设计是一种自然而然的、富有成就的和充满创新性的经历。示例驱动的指导重点聚焦Python最有用的功能,并力求把程序设计融入到每个致力于科学、工程和计算机科学领域的学生的日常学习和生活中。本书主要面向对数学、科学和工程感兴趣的大学一年级学生,亦可作为自学或程序设计与其他领域相结合的补充教材。

本书主要包含如下内容
程序设计的基本元素:变量、赋值语句、内置数据类型、选择语句、循环语句、数组和输入/输出,以及图形和声音。
函数、模块和库:将程序分解为可以独立调试、维护和重用的模块。
面向对象的程序设计和数据抽象:对象、模块化、封装等。
算法和数据结构:排序和搜索算法、堆栈、队列以及符号表。
来源于应用数学、物理学、生物科学、计算机科学的示例:都与Python 2和Python 3兼容。

作者简介
罗伯特·塞奇威克(Robert Sedgewick),斯坦福大学博士,导师为Donald E.Knuth,从1985年开始一直担任普林斯顿大学计算机科学系教授,曾任系主任,也是Adobe Systems公司董事会成员,曾在Xerox PARC、国防分析研究所和法国国家信息与电话研究所(INRIA)从事研究工作。他的研究方向包括数据结构和算法的分析与设计、程序可视化等。他同时也是《Java程序设计和算法(第4版)》的作者之一(另一个作者是Kevin Wayne)。
凯文·韦恩(Kevin Wayne),康奈尔大学博士,普林斯顿大学计算机科学系高级讲师。他自1998年开始任教于普林斯顿大学,研究方向包括算法的设计、分析和实现,特别是图和离散化。他是ACM杰出教育家。
罗伯特·唐德罗(Robert Dondero),德雷塞尔大学博士,普林斯顿大学计算机科学系讲师。他自2001年开始任教于普林斯顿大学,曾获得8个杰出工程教育奖和一个终身成就奖。

图书前言

21世纪以前的教育基础是“读、写和算术”,而现在的教育基础则是“读、写和计算”。学习编程是每个科学和工程专业学生教育过程中的重要部分。除了直接的应用外,学习编程是了解计算机科学本质的第一步。计算机科学对现代社会产生了毋庸置疑的影响。本书的目的是在科学环境中为需要编程或想学习编程的人讲授程序设计的基本方法和应用技巧。
我们的主要目标是通过提供经验和必要的基本工具使得学生更加有效地进行计算。我们的方法是向学生灌输这样的理念:编写程序是一种自然而然、富有成就感和充满创造性的体验。我们将循序渐进地介绍基本概念,并使用应用数学和科学中的典型应用来阐述这些概念,并为学生提供编写程序以解决相关问题的机会。
我们使用Python程序设计语言来编写本书中的所有程序—在本书的标题中,我们在“程序设计”之后提及“Python”以强调本书是关于程序设计的基本概念,而不仅仅是Python本身。这本书讲授了许多解决计算问题的基本技能,这些技能可以应用于许多现代计算环境中。本书自成体系,其目标人群是没有任何编程经验的人。
相对于传统的CS1课程而言,本书提供了一种跨学科的方法。我们将重点讲述计算在其他学科(材料科学、基因组学、天体物理学、网络系统等)中的重要地位。跨学科的方法向学生强调一种基本思想,即在当今世界中,数学、科学、工程和计算紧密结合在一起。同时,作为CS1的课本,本书主要面向对数学、科学和工程感兴趣的大学一年级学生。当然,本书也可用于自学,或者作为程序设计与其他领域相结合的课程的补充材料。
内容范围
本书根据学习编程的四个阶段来组织:基本元素、函数和模块、面向对象的程序设计、算法和数据结构。在进入编程的下一阶段之前,我们将向读者提供他们需要的基本信息,使读者有信心编写每个阶段的程序。本书所讲授方法的基本特征是使用示例程序解决感兴趣的问题,并提供各种练习题,从自学练习题到需要创新解决方案的挑战性难题。
基本元素包括变量、赋值语句、内置数据类型、控制流程、数组和输入/输出,以及图形和声音。
函数和模块为学生揭开了模块化程序设计的面纱。我们使用熟悉的数学函数来介绍Python函数,然后讨论使用函数编程的意义,包括库函数和递归函数。贯穿本书,我们强调一种基本理念,即把一个程序分解为可以独立调试、维护和重用的模块。
面向对象的程序设计是我们对数据抽象的介绍。我们强调数据类型的概念,并使用Python的类机制实现数据类型。我们将教会学生如何使用、创建和设计数据类型。模块化、封装和其他现代程序设计理念是面向对象程序设计阶段的中心概念。
算法和数据结构把这些现代程序设计理念与组织和处理数据的经典方法结合起来,因为经典方法依旧可以有效地用于现代应用程序。我们介绍了经典的排序和搜索算法,同时也介绍了基本的数据结构及其应用,强调了使用科学方法来理解实现的性能特征。
在科学和工程中的应用是本书的一个主要特点。我们通过其对具体应用的影响来强调我们所讨论的每一个程序设计概念。我们的示例来源于应用数学、物理学、生物科学、计算机科学本身,并包括物理系统模拟、数值方法、数据可视化、声音合成、图像处理、金融模拟和信息技术。具体的示例包括第1章用于页面排名的马尔可夫链以及渗透问题、n体模拟、小世界现象的案例研究。这些应用都是正文不可分割的组成部分。它们为学生提供了资料,阐述程序设计概念的重要性,并提供了计算在现代科学和工程中扮演着重要角色的令人信服的证据。
我们的主要目标是教授学生学会有效解决任何程序设计问题所需要的具体机制和技能。我们完全使用Python程序,并鼓励读者也使用Python程序。我们关注个人的程序设计,而不是大型的程序设计。
本书在大学课程中的使用
本书主要面向大学一年级课程,其目标是教授新生在科学应用的背景下进行程序设计。根据本书所讲授的内容,将来主修科学或工程技术的学生都将学会在熟悉的背景下学习程序设计。修完基于本书课程的学生将为在后续科学和工程技术课程中应用他们的技能做好准备,并会意识到本书所讲授的内容对进一步学习计算机科学是非常有益的。
特别是将来主修计算机科学的学生将会受益于在科学应用的背景下学习程序设计。与生物学家、工程师和物理学家一样,计算机科学家在科学方法中也需要相同的基本背景,并且要承担科学计算的任务。
实际上,跨学科的方法使得高等院校可给将来主修计算机科学或其他科学和工程技术的学生教授同一门课程。我们覆盖了CS1所规定的资料,但是我们对应用的关注给相关概念带来了生命,并激发了学生学习这些概念的兴趣。跨学科的方法向学生展示了许多不同学科中的问题,可帮助他们更明智地选择主修方向。
无论采用哪种具体机制,本书的使用最好安排在全部课程的早期。首先,这种安排允许我们利用高中数学和科学中所熟悉的资料。其次,学生在大学课程的早期学习程序设计将帮助他们在继续学习专业课程时有效地使用计算机。像阅读和写作一样,程序设计很显然也是任何科学家和工程师的一项基本技能。掌握本书概念的学生将终生不断发展这种技能,在其各自所选择的领域中,他们能够利用计算来解决或更好地理解问题和项目,并从这一过程中受益。
先修条件
本书非常适合于科学和工程技术专业的大学一年级学生。也就是说,我们不需要其他的预备知识,本书的先修条件和其他入门级科学和数学课程的要求基本一致。
完备的数学知识很重要。我们没有详细阐述相关的数学知识,但我们引用了学生在高中已经学习的数学课程,包括代数学、几何学和三角学。本书目标人群中的大多数学生都自动满足这些要求。事实上,我们充分利用了他们在基础课程中所熟悉的知识来介绍基本的编程概念。
科学的求知欲也是一个重要的部分。科学和工程技术专业的学生天生对进行科学探究以帮助解释自然本质的能力非常着迷。我们使用简单的关于自然界的程序示例支持这种偏爱。本书任何特定的知识都没有超过高中课程中的数学、物理、生物和化学的知识范围。
程序设计经验不是必需的,但却是有益的。讲授程序设计是我们的主要目标,因此本书没有要求任何先行的程序设计经验。然而,编写一个程序解决一个新问题是一项富有挑战性的智力任务,所以在高中阶段编写了许多程序的学生会从选修基于本书的程序设计入门课程中受益。本书可满足各种不同背景的学生的授课需求,因为本书中的应用无论对于新手还是专家都具有吸引力。
使用计算机的经验也不是必需的,况且这根本不是问题。现在的大学生经常使用计算机与亲朋好友交流、听音乐、处理照片或进行许多其他活动。能够以有趣而又重要的方式驾驭自己的计算机需要扣人心弦和长期的训练。
总之,几乎所有科学和工程技术领域的学生都可以在他们第一个学期的课表中选修基于本书的课程。
目标
在科学和工程技术专业的高级课程中,教师希望完成基于本书课程的学生学到什么样的知识呢?
我们覆盖了CS1课程,但任何讲授入门级程序设计课程的教师都知道,教授后续课程的教师期望值很高:每个教师都希望学生已经熟悉所需使用的计算环境和方法。物理学教授可能期望某些学生在周末设计一个程序来运行模拟;工程学教授可能期望某些学生使用一个特定的软件包并基于数值方法求解微分方程;计算机科学教授可能期望学生掌握特定编程环境的详细知识。本书真的可以满足这些不同的期望吗?对于不同的学生群体,是否需要不同的入门级课程?
自从20世纪后期计算机被广泛使用以来,高等院校就一直被这些类似问题困扰。对于这些问题,我们给出的解答是本书介绍通用的程序设计入门方法,类似于数学、物理学、生物学和化学中普遍接受的入门级课程。本书努力为科学和工程技术专业的学生提供必要的基本准备,同时也清楚地传递这样的信息:理解计算机科学比程序设计更重要。学习过本书的学生,教师可期望他们拥有适应于新的计算环境和在不同应用中有效利用计算机的必要知识和能力。
完成基于本书课程的学生,他们期望在后续课程中学习到什么呢?
我们的观点是程序设计并不难学,但学会驾驭计算机意义深远。在未来的职业生涯中,掌握了本书知识的学生已为应对计算挑战做好准备。他们了解现代程序设计环境(例如本书介绍的Python)将为未来可能遇见的任何计算问题打开一扇大门,同时他们也获得了学习、评价和使用其他计算工具的信心。对计算机科学感兴趣的学生将准备好进一步追寻这些兴趣,科学和工程技术专业的学生将准备好将计算融合到他们的研究中。
本书官网
在如下网站上,可以找到关于正文的大量补充信息:
http://introcs.cs.princeton.edu/python
为了方便,我们把这个站点称为本书官网。该网站包含了为使用本书的教师、学生和其他读者准备的资料。我们在这里简要描述一下这些资料,虽然所有的Web用户都知道,最好的方法是通过浏览器纵览它们。除了少部分用于测试的资料,其他资料都是公开可用的。
本书官网的一个最重要的意义是让教师和学生可以使用自己的计算机教授或学习这些资料。任何拥有计算机和浏览器的人,均可按照本书官网提供的一些指示开始学习程序设计。这个过程并不比下载一个媒体播放器或一首歌更困难。和任何其他网站一样,我们的网站也一直保持更新。对于任何拥有本书的人而言,本书官网是一个非常重要的资源。特别是补充材料对于我们达到如下目标至关重要,那就是使得计算机科学成为所有科学家和工程师教育不可分割的有机组成部分。
对于教师,本书官网包含了与教学相关的信息。这些信息主要按照我们过去十几年开发的教学模式进行组织,我们每周为学生授课两次,并且每周对学生进行两次课外辅导,学生分成小组与任课教师或助教进行讨论。本书官网包括用于这些授课的演示幻灯片,教师可基于这些幻灯片根据需要进行补充和修改。
对于助教,本书官网包含了详细的问题集和编程项目,它们均基于本书的习题,但包含更多的详细信息。每个程序设计任务作业旨在基于一个有趣的应用环境教授一个相关的概念,同时为每个学生提出一个引人入胜的挑战。课外作业的进展体现了我们的教学方法。本书官网全面详细地说明了所有的作业,并提供详细的结构化信息帮助学生在规定时间内完成任务,包括有关建议方法的描述,以及在课堂中应该讲述的授课内容纲要。
对于学生,本书官网包含可快速访问的本书的大部分资料,包括源代码以及鼓励学生自学的额外资料。本书官网为书本中的许多习题提供了参考解答,包括完整的程序代码和测试数据。还有许多与程序设计作业相关的信息,包括建议的方法、检查清单、常见问题解答以及测试数据。
对于一般读者,本书官网是访问与本书内容相关的所有额外信息的资源库。所有的网站内容都提供Web超链接和其他路径,以帮助读者寻找有关讨论主题的更多信息。网站包含了非常多的信息,比任何个人所能想象和接受的信息多得多,因为我们的目标是为本书内容提供足够多的信息,以满足每位读者的需求。
致谢
这个项目自1992年开始启动,迄今为止,许多人为这个项目的成功做出了贡献,我们在此对他们表示诚挚的感谢。特别感谢Anne Rogers的大力帮助,使本项目得以顺利启动;感谢Dave Hanson、Andrew Appel和Chris van Wyk耐心地解释数据的抽象化;还要感谢Lisa Worthington,她是第一个接受挑战,使用本书给大学一年级学生上课的老师。同时我们还要感谢/dev/126的努力;感谢过去25年中在普林斯顿大学致力于讲授本书内容的教师、研究生和教学人员;感谢成千上万努力学习本书的大学生们。

Robert Sedgewick
Kevin Wayne
Robert Dondero
2015.4

上架指导

计算机/程序设计/Python

封底文字

学习编程是每个科学和工程专业学生教育的重要部分,是了解计算机科学备注的第一步。本书的目的是在科学环境中为需要编程或想学习编程的人名讲授程序设计的基本方法和应用技巧。
Python编程语言是理想的第一门程序设计语言,本书所有程序都是使用Pyhton编程语言来编写的。本书讲授了多种解决计算机问题的基本技能,这些技能可以应用于现代计算环境中。
相对于传统的CS1课程而言,本书提供一种跨学科的方法,并强调一种基本思想,即当今世界中,数学、科学、工程和计算紧密结合。本书重点强调许多重要的相关应用,为读者提供了所需的工具,以帮助他们体会程序设计是一种自然而然的、富有成就的和充满创新性的经历。示例驱动的指导重点聚焦Python最有用的功能,并力求把程序设计融入到每个致力于科学、工程和计算机科学领域的学生的日常学习和生活中。本书主要面向对数学、科学和工程感兴趣的大学一年级学生,亦可作为自学或程序设计与其他领域相结合的补充教材。
本书主要包含如下内容:
·程序设计的基本元素:变量、赋值语句、内置数据类型、选择语句、循环语句、数组和输入/输出,以及图形和声音。
·函数、模块和库:将程序分解为可以独立调试、维护和重用的模块。
·面向对象的程序设计和数据抽象:对象、模块化、封装等。
·算法和数据结构:排序和搜索算法、堆栈、队列以及符号表。
·来源于应用数学、物理学、生物科学、计算机科学的示例:都与Python 2和Python 3兼容。

作者简介

[美] 罗伯特·塞奇威克(Robert Sedgewick) 凯文·韦恩(Kevin Wayne) 罗伯特·唐德罗(Robert Dondero) 著:罗伯特·塞奇威克(Robert Sedgewick),斯坦福大学博士,导师为Donald E.Knuth,从1985年开始一直担任普林斯顿大学计算机科学系教授,曾任系主任,也是Adobe Systems公司董事会成员,曾在Xerox PARC、国防分析研究所和法国国家信息与电话研究所(INRIA)从事研究工作。他的研究方向包括数据结构和算法的分析与设计、程序可视化等。他同时也是《Java程序设计和算法(第4版)》的作者之一(另一个作者是Kevin Wayne)。

凯文·韦恩(Kevin Wayne),康奈尔大学博士,普林斯顿大学计算机科学系高级讲师。他自1998年开始任教于普林斯顿大学,研究方向包括算法的设计、分析和实现,特别是图和离散化。他是ACM杰出教育家。
罗伯特·唐德罗(Robert Dondero),德雷塞尔大学博士,普林斯顿大学计算机科学系讲师。他自2001年开始任教于普林斯顿大学,曾获得8个杰出工程教育奖和一个终身成就奖。

译者简介

江红 余青松 译:暂无简介

译者序

本书介绍程序设计的基本概念,而不仅仅是Python本身。本书的侧重点在于讲授使用程序设计解决各学科(从材料科学到基因组学、天体物理学、网络系统等)中的计算问题。本书除了讲述Python语言基础知识之外,还涉及许多新的研究领域(例如,随机Web冲浪模型、渗透原理、多体模拟、数据挖掘、小世界现象等),能激发学生对科学探究的求知欲,为以后专业课的学习打下坚实的基础。
本书采用跨学科的方法,重点讲述计算在其他学科中的重要地位。这种跨学科的方法向学生强调一种基本思想,即在当今世界中,数学、科学、工程和计算紧密结合在一起。本书面向对使用计算机程序解决数学、科学和工程问题感兴趣的大学生或研究生,作为教材的同时也可用于自学,或作为与其他领域相结合的程序设计课程的补充材料。
本书内容根据学习程序设计的四个阶段来组织:基本元素、函数和模块、面向对象的程序设计、算法和数据结构。本书由浅入深,将理论知识和实际应用相结合,逐步引导读者掌握通过计算机程序设计解决各种科学和技术研究问题的方法。本书的最大特色是提供丰富的实际应用示例,用于分析和解决各学科中涉及的计算问题。本书的应用示例涉及应用数学、物理、生物科学、计算机科学、物理系统、数字方法、数据可视化、声音合成、图像处理、金融模拟和信息技术等方面,真正体现了其跨学科的特点。
另外,本书包括大量的习题和创新习题,可引导读者进一步拓展通过程序设计解决科学和技术问题的能力。
本书配套课程是普林斯顿大学的精品课程,在其提供的教学官网(http://introcs.cs. princeton.edu/python)中包含大量的教学辅助内容,无论是教师、助教、学生还是一般读者,均可以从中获取与本书内容相关的所有资源库。
本书由华东师范大学江红和余青松共同翻译。衷心感谢本书的编辑王颖老师和刘诗灏老师,敬佩他们的睿智和敬业。我们在翻译过程中力求忠于原著,但由于时间和学识有限,且本书涉及各个领域的专业知识,故书中的不足之处在所难免,敬请诸位同行、专家和读者指正。

江红 余青松

图书目录

出版者的话
译者序
前言
第1章 程序设计的基本元素 1
1.1 你的第一个程序 1
1.1.1 Python程序设计 2
1.1.2 输入和输出 4
1.1.3 问题和解答 5
1.1.4 习题 8
1.2 内置数据类型 8
1.2.1 相关术语 9
1.2.2 字符串 14
1.2.3 整数 16
1.2.4 浮点数 18
1.2.5 布尔值 20
1.2.6 比较 22
1.2.7 函数和API 24
1.2.8 数据类型转换 26
1.2.9 小结 28
1.2.10 问题和解答(字符串) 28
1.2.11 问题和解答(整数) 30
1.2.12 问题和解答(浮点数) 31
1.2.13 问题和解答 32
1.2.14 习题 34
1.2.15 创新习题 35
1.3 选择结构和循环结构 37
1.3.1 if语句 38
1.3.2 else子句 39
1.3.3 while语句 40
1.3.4 for语句 44
1.3.5 语句嵌套 46
1.3.6 应用实例 48
1.3.7 循环和中断 55
1.3.8 死循环 56
1.3.9 小结 57
1.3.10 问题和解答 58
1.3.11 习题 60
1.3.12 创新习题 63
1.4 数组 65
1.4.1 Python中的数组 66
1.4.2 数组别名和拷贝 70
1.4.3 Python对数组操作提供的系统支持 71
1.4.4 一维数组应用实例 73
1.4.5 二维数组 80
1.4.6 二维数组应用实例:自回避随机行走 84
1.4.7 小结 87
1.4.8 问题和解答(字符串) 87
1.4.9 习题 88
1.4.10 创新习题 89
1.5 输入和输出 92
1.5.1 鸟瞰图 93
1.5.2 标准输出 95
1.5.3 标准输入 97
1.5.4 重定向和管道 100
1.5.5 标准绘图 104
1.5.6 动画 111
1.5.7 标准音频 113
1.5.8 小结 115
1.5.9 问题和解答 116
1.5.10 习题 118
1.5.11 创新习题 121
1.6 应用案例:随机Web冲浪模型 123
1.6.1 输入格式 124
1.6.2 转换矩阵 125
1.6.3 模拟 126
1.6.4 混合马尔可夫链 130
1.6.5 经验总结 134
1.6.6 习题 135
1.6.7 创新习题 136
第2章 函数和模块 137
2.1 定义函数 137
2.1.1 调用和定义函数 138
2.1.2 实现数学函数 145
2.1.3 使用函数组织代码 147
2.1.4 传递参数和返回值 149
2.1.5 实例:声波的叠加 152
2.1.6 问题和解答 156
2.1.7 习题 158
2.1.8 创新习题 160
2.2 模块和客户端 163
2.2.1 使用其他程序中的函数 164
2.2.2 模块化程序设计的抽象概念 168
2.2.3 随机数 172
2.2.4 数组处理API 174
2.2.5 迭代函数系统 176
2.2.6 标准统计 179
2.2.7 模块化程序设计 184
2.2.8 问题和解答 186
2.2.9 习题 188
2.2.10 创新习题 189
2.3 递归 191
2.3.1 你的第一个递归程序 192
2.3.2 数学归纳法 194
2.3.3 欧几里得算法 194
2.3.4 汉诺塔 195
2.3.5 函数调用树 196
2.3.6 指数时间 198
2.3.7 格雷码 199
2.3.8 递归图形 200
2.3.9 布朗桥 202
2.3.10 递归的陷阱 205
2.3.11 展望 207
2.3.12 问题和解答 207
2.3.13 习题 208
2.3.14 创新习题 209
2.4 案例研究:渗透原理 212
2.4.1 渗透原理 213
2.4.2 基本脚手架代码 214
2.4.3 垂直渗透 215
2.4.4 测试 217
2.4.5 估计概率 220
2.4.6 渗透原理的递归解决方案 221
2.4.7 自适应绘制图形 224
2.4.8 经验总结 227
2.4.9 问题和解答(字符串) 228
2.4.10 习题 229
2.4.11 创新习题 230
第3章 面向对象的程序设计 232
3.1 使用数据类型 232
3.1.1 方法 233
3.1.2 字符串处理 234
3.1.3 字符串处理应用:基因组学 237
3.1.4 用户自定义数据类型 237
3.1.5 颜色 242
3.1.6 数字图像处理 244
3.1.7 输入和输出(进一步讨论) 252
3.1.8 内存管理 257
3.1.9 问题和解答 258
3.1.10 习题 259
3.1.11 创新习题 261
3.2 创建数据类型 264
3.2.1 数据类型的基本元素 264
3.2.2 秒表 270
3.2.3 直方图 272
3.2.4 海龟绘图 273
3.2.5 递归图形 276
3.2.6 复数 280
3.2.7 曼德布洛特集合 281
3.2.8 商业数据处理 285
3.2.9 问题和解答 288
3.2.10 习题 290
3.2.11 创新习题 293
3.3 设计数据类型 296
3.3.1 设计API 297
3.3.2 封装 299
3.3.3 不可变性 303
3.3.4 实例:空间向量 305
3.3.5 元组 308
3.3.6 多态性 309
3.3.7 重载 310
3.3.8 函数是对象 315
3.3.9 继承 315
3.3.10 应用:数据挖掘 316
3.3.11 契约式设计 321
3.3.12 问题和解答 322
3.3.13 习题 323
3.3.14 数据类型设计习题 324
3.3.15 创新习题 325
3.4 案例研究:多体模拟 325
3.4.1 多体模拟 326
3.4.2 问题和解答 332
3.4.3 习题 333
3.4.4 创新习题 333
第4章 算法和数据结构 334
4.1 性能 334
4.1.1 观察 335
4.1.2 假说 335
4.1.3 增长量级分类 340
4.1.4 预测 343
4.1.5 注意事项 345
4.1.6 性能保证 346
4.1.7 Python列表和数组 347
4.1.8 字符串 349
4.1.9 内存 351
4.1.10 展望 354
4.1.11 问题和解答 355
4.1.12 习题 357
4.1.13 创新习题 361
4.2 排序和查找 363
4.2.1 二分查找法 363
4.2.2 插入排序算法 369
4.2.3 归并排序算法 374
4.2.4 Python系统排序方法 377
4.2.5 应用:频率计数 378
4.2.6 经验总结 380
4.2.7 问题和解答 381
4.2.8 习题 382
4.2.9 创新习题 383
4.3 栈和队列 385
4.3.1 下堆栈(后进先出栈) 386
4.3.2 基于Python列表(可变数组)实现栈 387
4.3.3 基于链表实现栈 389
4.3.4 堆栈的应用 394
4.3.5 FIFO队列 398
4.3.6 队列的应用 402
4.3.7 资源分配 404
4.3.8 问题和解答 406
4.3.9 习题 407
4.3.10 链表习题 409
4.3.11 创新习题 411
4.4 符号表 415
4.4.1 符号表API 415
4.4.2 符号表客户端 417
4.4.3 基本符号表实现 422
4.4.4 哈希表 424
4.4.5 二叉搜索树 426
4.4.6 BST的性能特点 432
4.4.7 BST的遍历 434
4.4.8 可迭代对象 434
4.4.9 有序符号表操作 436
4.4.10 字典数据类型 437
4.4.11 集合数据类型 437
4.4.12 展望 438
4.4.13 问题和解答 439
4.4.14 习题 439
4.4.15 二叉树习题 442
4.4.16 创新习题 444
4.5 案例研究:小世界现象 447
4.5.1 图 448
4.5.2 图数据类型 451
4.5.3 Graph客户端例子 454
4.5.4 图的最短路径 457
4.5.5 小世界图 464
4.5.6 经验总结 470
4.5.7 问题和解答 471
4.5.8 习题 471
4.5.9 创新习题 473
后记 477
词汇表 479
索引 482
应用程序编程接口 512

教学资源推荐
参考读物推荐
作者: 余洪春 著
作者: 工信部通信行业职业技能鉴定指导中心 中国移动互联网基地 编著
作者: [美] 比尔·瓦格纳(Bill Wagner) 著