为什么用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章介绍图和图处理算法。

本书的特色在于呈现一个多项集类的专家级框架。你看到的不会是一系列毫不相关的多项集,而是每个多项集在整体框架里的相应位置。这种方法能够让你了解到多项集类型的共同点以及使用不同多项集类型的原因。同时,你会接触到继承和类的层次结构,而这正是面向对象的软件设计的主题,虽然这些主题是这个级别的课程很少讲解和体现的。

第二版升级重点

关于作者

华盛顿与李大学教授出版的这本数据结构书,是国外高等院校优秀教材相关推荐

  1. 记普林斯顿大学教授李凯:从中国工人到美国院士

    记普林斯顿大学教授李凯:从中国工人到美国院士 [字体: 大 中 小 ] www.ebiotrade.com 时间:2012年03月01日 来源:人民日报海外版 编辑推荐: 美国国家工程院日前公布了20 ...

  2. 博士申请 | 伦敦帝国理工学院李烨教授招收智能信号处理方向全奖博士生

    合适的工作难找?最新的招聘信息也不知道? AI 求职为大家精选人工智能领域最新鲜的招聘信息,助你先人一步投递,快人一步入职! 伦敦帝国理工学院 伦敦帝国理工学院(Imperial College Lo ...

  3. 北京邮电大学计算机学院李剑,北京邮电大学李剑教授学术报告

    报告时间:2019年7月20日上午10:00-12:00 报告地点:中南大学铁道学院电子楼404会议室 报告题目:量子计算对传统密码的威胁 报告人:李剑教授,北京邮电大学计算机学院 报告摘要:随着人类 ...

  4. 博士申请 | 香港理工大学李青教授团队招收机器学习方向全奖博士/博后/RA

    合适的工作难找?最新的招聘信息也不知道? AI 求职为大家精选人工智能领域最新鲜的招聘信息,助你先人一步投递,快人一步入职! 香港理工大学 香港理工大学位于中国香港特别行政区,QS 最新排名-世界 6 ...

  5. 一张清华大学教授工资单曝光!想象与现实天壤之别……

    来源 | 舞娱人 转自 | 论文项目硕博招聘 都说书中自有颜如玉,书中自有黄金屋,而现在中国也是一个教育大国,教育氛围浓厚,许多父母也为了自己的子女能够得到更好的教育而竭尽心力,也希望自己的孩子能够考 ...

  6. 逻辑差学计算机,数学差的人不配学计算机?布朗大学教授告诉你一毛钱关系都没有!...

    原标题:数学差的人不配学计算机?布朗大学教授告诉你一毛钱关系都没有! 最近正是留学申请季,也是大三/高二党开始备战明年申请季.无论对于高中生.本科生.还是硕士生来说,上哪所学校和学什么专业成为了现阶段 ...

  7. 新当选ACM Fellow李向阳教授:心有理想 向阳而生

    国际计算机协会(ACM)近日公布今年新当选Fellow的名单,全球58名学者当选,其中华人7人,中国大陆仅3人上榜.中国科学技术大学信息与智能学部常务副部长.计算机学院执行院长李向阳教授,因在智能物联 ...

  8. 学数学但是不会计算机,数学差的人不配学计算机?布朗大学教授告诉你一毛钱关系都没有!...

    原标题:数学差的人不配学计算机?布朗大学教授告诉你一毛钱关系都没有! 最近正是留学申请季,也是大三/高二党开始备战明年申请季.无论对于高中生.本科生.还是硕士生来说,上哪所学校和学什么专业成为了现阶段 ...

  9. 李向阳教授谈中科大AI承继与挑战,IT校友影响力惊人

    李根 发自 G195  量子位 报道 | 公众号 QbitAI 头像用了"双枪李向阳"的中科大教授李向阳,很忙. 这位IEEE Fellow.ACM杰出科学家.中国科学技术大学计算 ...

最新文章

  1. 整理的一点MD5资料(第一部分)
  2. java保留两位小数_java使double保留两位小数的多方法 java保留两位小数
  3. exp()用法和点乘的原因
  4. CDCN 活体检测笔记
  5. AutoBench的使用分析
  6. 【温故知新】CSS学习笔记(外边距合并)
  7. 乐视网:公司董事、总经理、财务总监张巍因个人原因辞职
  8. Video-Swin-Transformer (二)
  9. centos nginx php5.3,centos6.2+nginx-1.2.3+php-5.3.17装配脚本
  10. 用js创建客户端控件
  11. 苹果CMS 改造四合一聚合影视+聚合直播+在线小说+短视频+在线音乐+电视直播
  12. CSR8系列ROM版本芯片介绍
  13. UWB室内定位系统,你知道几分
  14. ps怎么抠地图线路_怎样在PS里画地图的边界线?
  15. Word文档 公式换行 小技巧
  16. 蜂鸣器干扰通讯_蜂鸣器工作原理是什么,为什么需要接振荡的信号才能工作?...
  17. python开发一个自动批改本地Word作业的程序
  18. 回国后无线网safari无法连接服务器,解决Mac能连上WIFI但无法上网的问题
  19. HCIA-USG Security Policy
  20. wordpress主题 Cosy主题3.X下载

热门文章

  1. 【转】高清混合矩阵应用于佛山市政府大礼堂会议系统解决方案
  2. 多旋翼无人机仿真 rotors_simulator:roll pitch yawrate thrust 控制器
  3. css 背景效果_软件技术:我写CSS的常用套路(附demo的效果实现与源码)
  4. IHERB上待产包准备指南-宝宝篇
  5. 漏洞深度分析|Thinkphp 多语言 RCE
  6. 运放专题:运放输出电压
  7. 浙江农林大学ACM集训队2019级队长退役回忆录(未实际退役版本)
  8. IntelliJ IDEA Ultimate 安装激活
  9. C#工业触摸屏上位机源码 纯源代码 替代传统plc搭载的触摸屏
  10. 在项目中这样写代码的时候,请搭配红花油、跌打损伤酒一起使用