华盛顿与李大学教授出版的这本数据结构书,是国外高等院校优秀教材
Posted 人邮异步社区
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了华盛顿与李大学教授出版的这本数据结构书,是国外高等院校优秀教材相关的知识,希望对你有一定的参考价值。
为什么用Python 语言来讲解数据结构
在过去的30年里,与计算机相关的技术和应用日渐复杂,计算机科学的相关课程(尤其是入门级的课程)更是如此。如今,人们期望学生在学了一点点编程和解决问题的相关知识之后,就能够很快开始学习诸如软件开发、复杂度分析以及数据结构这类课程——这些课程在30年前都属于高级课程的范畴。除此之外,面向对象编程兴起并成为主导范式,也让授课老师和教材的编写者可以把那些功能强大甚至能够直接应用于行业里的编程语言(如C++和Java)引到入门课程里。这就导致刚开始学习计算机知识的学生还没来得及体验用计算机解决问题的优势以及带来的兴奋感,就因为要去精通那些更高级的概念以及编程语言里的语法而变得不知所措。
本书使用Python编程语言,以使计算机科学的第二门课程对学生和授课老师来说更具吸引力且易于学习。
Python具有如下教学优势。
(1)Python的语法非常简单且标准。Python的语句和伪代码算法的语句非常接近,而且Python的表达式使用了代数里的常规符号。这样,你可以花更少的时间了解编程语言的语法,进而把较多的时间花在解决有趣的问题上。
(2)Python的语义是安全的。任何表达式或语句只要违反了语言所定义的语义,都会得到错误的消息。
(3)Python的扩展性很好。Python可以让初学者很容易地编写出简单的程序。Python也包含了现代编程语言的许多功能,例如,对数据结构的支持以及面向对象的软件开发这样的高级功能,使开发者能够在需要的时候(比如说在计算机科学的第二门课程里)使用这些功能。
(4)Python语言具有良好的可交互性。你可以在解释器的提示符窗口里输入表达式和语句,以验证代码,并且会立即收到反馈。你也可以编写较长的代码段,并把它们保存在脚本文件里,以作为模块或作为独立的应用程序加载。
(5)Python是通用的。在当今的语言环境下,这意味着该语言有可以用在现代应用程序中的相应资源——这些资源包括媒体计算和Web服务,等等。
(6)Python是免费的,并且在业内得到了越来越广泛的使用。你可以在各种设备上直接下载并运行Python。Python的用户群体也非常庞大,而你的简历里有Python编程方面的专业背景将是一个加分项。
综上所述,Python是一个既方便又灵活的工具,无论对于初学者还是专家来说,它都可以用来表达计算思想。如果你在第一年里很好地学习了这些想法,那么多半可以轻松过渡到之后课程会用到的其他编程语言。更为重要的是,你会花更少的时间来盯着计算机屏幕,而可以把更多的时间用于思考解决有趣的问题。
数据结构(Python语言描述)(第2版)
本书主要介绍计算机编程中如下4个主要方面的内容。
(1)编程基础——数据类型、控制结构、算法开发以及通过函数进行程序设计,是解决计算机问题所需要掌握的基本思想。本书用Python编程语言介绍这些核心主题,旨在帮助你通过理解这些主题解决更广泛的问题。
(2)面向对象编程——面向对象编程是用于开发大型软件系统的主要编程范式。本书介绍OOP的基本原理,旨在让你能够熟练地应用它们。和其他教科书不同,本书会引导你开发一个专业的多项集类的框架,以说明这些原理。
(3)数据结构——大多数程序会依赖数据结构解决问题。在最具体的层级,数据结构包含数组以及各种类型的链接结构。本书介绍如何使用这些数据结构来实现各种类型的多项集结构(如栈、队列、列表、树、包、集合、字典和图),还会介绍如何使用复杂度分析来评估这些多项集的不同,进而实现在时间与空间上的权衡。
(4)软件开发生命周期——本书不会设单独的一两章去介绍软件开发技术,而是通过大量的案例全面概述这方面的内容。本书还会强调,编写程序通常并不是解决问题或软件开发里最困难或最具挑战性的部分。
本书结构
本书通过循序渐进的方式推进,并且只有在需要的时候才会引入新概念。
第1章回顾Python编程的相关功能,这是用Python学习计算机科学的第二门课程里的编程和解决问题必需的。如果你有丰富的Python编程经验,那么可以快速地浏览一遍这一章的内容;如果你是Python新手,那么可以通过这部分内容深入了解这门语言。
本书其余部分(第2~12章)涵盖通常会包含在计算机科学的第二门课程里的主要主题,特别是抽象数据类型的规范、实现及应用等内容,并且会把多项集类型作为学习的主要工具和重点。在这些内容里,你将全面了解面向对象的编程技术以及好软件的设计要素。本书还涉及计算机科学的第二门课程里其他一些重要的主题,例如数据的递归处理、搜索和排序算法以及软件开发[复杂度分析或用在设计文档里的图形符号(UML)]里会用到的工具。
第2章介绍抽象数据类型(Abstract Data Type,ADT)的概念,并且对各种多项集中的抽象数据类型进行概览。
第3章和第4章介绍实现大部分多项集的数据结构,并且介绍了一些用来进行复杂度分析的工具。第3章介绍使用大O表示法的复杂度分析。这部分内容包含了很多材料,用搜索和排序算法作为例子,对算法和数据结构的运行时以及内存使用情况进行了简单分析。第4章介绍使用数组和线性链接结构的相关细节,这些数据结构用于实现大部分多项集。你将了解支持数组和链接结构的计算机内存的底层模型,以及使用它们所需要面对的时间/空间的权衡等内容。
第5章和第6章把关注点转移到面向对象设计的原则上。这些原则在后续章节里用于构建多项集类的专家级框架。
第5章讨论接口和实现之间的重要差异。开发包多项集的一个接口和多个实现作为展现这些差异的第一个例子。本章会将重点放在接口包含的通用方法上,允许不同类型的多项集在应用程序里进行协作,比如用来创建迭代器的方法。这个通用方法所创建的迭代器能够通过简单的循环来遍历任何一个多项集。本章还会介绍多态以及信息隐藏,这些主题也会通过接口和实现之间的差异表现出来。
第6章介绍类的层次结构是如何减少面向对象软件系统里的冗余代码的,还会介绍继承、方法调用的动态绑定以及抽象类的相关概念。这些概念会在后续章节里被反复使用。
在掌握这些概念和原则之后,你就可以开始学习第7~12章里其他重要的多项集抽象数据类型了。
第7~9章介绍栈、队列以及列表。我们会先从用户的角度进行介绍,以便你能了解所选实现里提供的接口以及一系列性能特征。我们会通过一个或多个应用程序说明每个多项集的用法,然后开发出这个多项集的若干种实现,并分析它们在性能上的权衡。
第10~12章介绍更高级的数据结构和算法,以便帮助你过渡到计算机科学里更高阶的课程。第10章讨论各种树结构,如二叉查找树、堆和表达式树。第11章通过哈希策略研究无序集合、包、集合和字典的实现。第12章介绍图和图处理算法。
本书的特色在于呈现一个多项集类的专家级框架。你看到的不会是一系列毫不相关的多项集,而是每个多项集在整体框架里的相应位置。这种方法能够让你了解到多项集类型的共同点以及使用不同多项集类型的原因。同时,你会接触到继承和类的层次结构,而这正是面向对象的软件设计的主题,虽然这些主题是这个级别的课程很少讲解和体现的。
第二版升级重点
关于作者
以上是关于华盛顿与李大学教授出版的这本数据结构书,是国外高等院校优秀教材的主要内容,如果未能解决你的问题,请参考以下文章