首页 > 图书中心 >图书详情

数据结构(用面向对象方法与C++语言描述)(第3版)

基于抽象数据类型和软件复用,用面向对象的观点讨论数据结构,有新意,也有继承!

作者:殷人昆
定价:89
印次:3-2
ISBN:9787302586623
出版日期:2021.09.01
印刷日期:2022.06.08

错误修订:149页第3行“这个模式……算法。”改为“朴素算法英文叫 brute-force search,其中 brute-force 是暴力或者是穷举的意思。”。 ---内容简介: “数据结构”是计算机专业的核心课程,是从事计算机软件开发和应用的人员应当必备的专业基础。随着计算机的日益普及,“数据结构”课程也在不断发展。 本书按照清华大学计算机科学与技术系本科“数据结构”大纲的要求,从面向对象的概念、对象类设计的风格和数据结构的层次开始,从线性结构到非线性结构,从简单到复杂,循序渐进,逐步深入地讨论了各种数据结构的内在的逻辑关系及它们在计算机中的实现方式和使用。此外,本书对常用的迭代、递归、回溯等算法设计技巧,搜索和排序算法等都做了详尽描述,并引入了简单的算法分析。 全书采用了面向对象的观点讨论数据结构技术,并以兼有面向过程和面向对象双重特色的C++语言作为算法的描述工具,强化基本知识和基本能力的双基训练。全书条理清晰,通俗易懂,图文并茂,适于自学。 本书适合于大专院校计算机或软件专业本科生使用,也可作为教师和有关科研人员的参考书。与本书配套的《数据结构精讲与习题详解(C语言版)(第2版)》一书已由清华大学出版社出版。此外,需要PowerPonit电子教学幻灯片的教师,可与清华大学出版社联系。

more >

前言 计算机的普及极大地改变了人们的工作和生活。目前各个行业、各个领域都与计算机建立了紧密的联系,也随之带来了开发各种软件的需求。为了能够以最小的成本、最快的速度、最好的质量开发出合乎需要的软件,必须遵循软件工程的原则,把软件的开发和维护标准化、工程化,不能再像以前那样,把软件看作是个人雕琢的精品。就软件产品而言,最重要的就是建立合理的软件体系结构和程序结构,设计有效的数据结构。因此,要做好软件开发工作,必须了解如何组织各种数据在计算机中的存储、传递和转换。这样,“数据结构”这门课程显得格外重要。自1978年美籍华裔学者冀中田在国内首开这门课程以来(当时作者也在场),经过40余年的发展,本课程已成为各大学计算机专业本科的主干课程,也成为非计算机类学生和研究生学习计算机的必修课程。 “数据结构”课程脱胎于“离散数学结构”,它涉及各种离散结构(如向量、集合、树、图、代数方程、多项式等)在计算机上如何存储和处理。其内容丰富,涉及面广,而且还在随各种基于计算机的应用技术的发展,不断增加新的内容。特别是面向对象技术出现以后,人们认识到,用它开发出来的软件体系结构更加符合人们的习惯,质量更容易得到保证,尤其是更容易适应使用者和用户不断提出的新的需求。因此,在国际上,面向对象技术得到迅速普及,出现了大批面向对象的软件开发工具。为了适合形势的要求,有必要开设结合面向对象技术的“数据结构”课程。 用面向对象的观点讨论数据结构,与传统的面向过程的讲法相比,变化较大。各种数据结构的讨论都是基于抽象数据类型和软件复用的,有新意,也有继承。我们力图与过去的讲授体系保持一致,但又必须引入一些新的概念。为了能够让读者容易学习,我们对内容进行了精选。许多从基本数据结构派生出来的概念,如双端堆、二项堆、最小最大堆、斐波那契堆、左斜树、扁树、B*树等,都舍去了。同时,把动态存储管理部分归到“操作系统”课程,把文件组织部分归到“数据库原理”课程,只保留了重要的应用最广泛的一些结构。对这些结构做全面、深入的讲解,阐明数据结构内在的逻辑关系,讨论它们在计算机中的存储表示,并结合各种典型实例说明它们在解决应用问题时的动态行为和各种必要的操作,并以C++语言为表述手段,介绍在面向对象程序设计过程中各种数据结构的表达和实现。只要学过C或Pascal语言,就能够很容易地阅读和理解,并因此学习C++语言,提高读者的软件设计和编程能力。 本书是作为清华大学信息学院平台课“数据结构”的教材编写的,在编写过程中得到清华大学信息学院领导的支持,并获得普通高等教育“十一五”国家级规划教材的资助。参与策划的有计算机科学与技术系教师殷人昆、邓俊辉、舒继武、朱仲涛,电子工程系教师朱明方、吴及,自动化系教师李宛洲、刘义,微电子与纳电子学系教师李树国,软件学院教师张力以及信息科学技术学院办公室的教师王娜等。第4章由舒继武执笔,第5章由朱仲涛执笔,第8章由邓俊辉执笔,第9章由吴及执笔,其他各章由殷人昆执笔。作者都是在清华大学从事“数据结构”课程第一线教学的教师,有着丰富的数据结构和软件工程教学的经验,教学效果良好。 全书共分10章。第1章是预备知识,主要介绍什么是数据,数据与信息的关系;什么是数据结构,数据结构的分类。通过学习,读者能够了解抽象数据类型和面向对象的概念,并对对象、类、继承、消息以及其他关系的定义、使用有基本认识。我们选择了具有面向过程和面向对象双重特点的C++语言,可以帮助读者自然而轻松地从传统程序设计观念向面向对象方法转变。在这一章的最后还讨论了算法定义和简单的算法分析方法。 第2章是全书的基础,讨论了线性表、它的数组表示和链表表示,以及利用它们定义出来的各种结构,如顺序表、代数多项式等。通过学习,读者可以了解对象和类的基本实现,并通过模板、多态性等的使用,对数据抽象概念有进一步的理解。 第3章引入4种存取受限的表,即栈、队列、优先级队列和双端队列。通过对它们的定义、实现和应用的深入介绍,使读者能够了解在什么场合使用它们,为以后更复杂的数据结构和算法的实现提供了多种辅助手段。 第4章介绍在许多领域中经常遇到的多维数组、字符串和广义表。这些都是应用广泛又十分灵活的结构。 第5章和第8章介绍在实际应用中最重要的非线性结构——树与图。在管理、电子设计、机械设计、日常生活中的许多方面都会用到它们。 第6章、第7章和第10章介绍集合、跳表、散列、搜索树、索引以及文件等结构。在实际与信息处理相关的应用中,这些结构十分重要。许多非数值处理都涉及这些结构,它们与内存、外存上的数据组织关系密切。例如,在外存组织文件时全面应用了这些结构。它们又是许多新结构的生长点。因此,读者学习这些内容将获益匪浅。 第9章介绍排序。这也是应用十分广泛的技术。只要是数据处理,就少不了排序。如何才能高效地完成排序?本章分别就内存、外存使用的多种排序方法进行介绍和讨论,读者可以深入了解排序的机制,也能从中学到许多程序设计的技巧。 本书的篇幅虽然较大,但给读者以选择。读者可以根据时间、能力,适当对学习的内容加以剪裁。本着少讲多练的原则,可以对每种结构只介绍类定义和关键操作的实现,其他内容可自学。通过上机练习,加深理解。在本书目录中加**的章节可以酌情不讲。 在本书的成书过程中得到清华大学出版社的支持,在此表示衷心的感谢。最后需要说明的是,由于作者的水平有限,书中难免存在疏漏或错误,请读者批评指教。 作者2021年5月

more >
扫描二维码
下载APP了解更多

同系列产品more >

图论与代数结构(第2版)

崔勇,张小平
定 价:49元

查看详情
C++语言程序设计(第5版)学生用书

郑莉
定 价:39元

查看详情
数据挖掘:方法与应用(第2版)

徐华
定 价:45元

查看详情
Java语言程序设计(第3版)

郑莉 张宇
定 价:79.90元

查看详情
数据结构算法解析

殷人昆
定 价:158元

查看详情
图书分类全部图书
more >
  • 清华大学计算机系教授,1970年清华大学计算数学专业毕业,1980年清华大学计算机系软件研究生毕业并获得工学硕士学位,1985年赴日本国东京理科大学做访问学者,研究方向为软件工程过程的质量管理和软件产品的质量评价。现已退休。主要教学工作:多年为清华大学计算机系大学本科《数据结构》、《软件工程》和研究生《软件工程设计与技术》、《软件项目管理》课程负责人,并主持教育部-微软精品课程《数据结构》的建设。曾与人合作或单独编写和出版教材二十余本,其中,《数据结构》教材被评为教育部十一五规划教材,并获得北京市精品教材。在职期间参加多项科研项目,在核心刊物和专业会议发表多篇论文。
  • “数据结构”课程脱胎于“离散数学结构”,它涉及各种离散结构(如向量、集合、树、图、代数方程、多项式等)在计算机上如何存储和处理。面向对象技术出现以后,人们认识到,用它开发出来的软件体系结构更加符合人们的习惯,质量更容易得到保证,尤其是更容易适应使用者和用户不断提出的新的需求,因此有必要开设结合面向对象技术的“数据结构”课程。本书自1999年第1版出版以来,备受读者好评,并获得普通高等教育“十一五”国家级规划教材。第3版在前一版的基础上优化了很多算法的实现,对一些章节进行了删减,突出了内容的重点,同时对每章的习题都进行了更新,使题型更丰富,内容更深厚。本书内容翔实,结构清晰,示例丰富, 理论结合实际,注重素质培养。
more >
  • 目录

    第1章数据结构概论1

    1.1数据结构的概念1

    1.1.1数据结构举例1

    1.1.2数据与数据结构2

    1.1.3数据结构的分类3

    1.1.4“数据结构”课程的内容4

    1.2数据结构的抽象形式6

    1.2.1数据类型6

    1.2.2数据抽象与抽象数据类型7

    1.3作为ADT的C++类9

    1.3.1面向对象的概念9

    1.3.2C++中的类10

    1.3.3C++中的对象12

    1.3.4C++的输入输出13

    1.3.5C++中的函数14

    1.3.6动态存储分配17

    1.3.7C++中的继承18

    1.3.8多态性19

    1.3.9C++的模板23

    1.4算法定义24

    1.5算法性能分析与度量25

    1.5.1算法的性能标准26

    1.5.2算法复杂性度量26

    1.5.3算法的渐进分析31

    1.5.4最坏、最好和平均情况35

    习题36

    第2章线性表40

    2.1线性表的概念40

    2.1.1线性表的定义40

    2.1.2线性表的类定义41

    2.2顺序表42

    2.2.1顺序表的定义和特点42

    2.2.2顺序表的类定义及其操作42

    2.2.3顺序表的性能分析47

    2.2.4顺序表的应用49

    2.3单链表49

    2.3.1单链表的概念50

    2.3.2单链表的类定义51

    2.3.3单链表中的插入与删除52

    2.3.4带附加头结点的单链表54

    2.3.5单链表的模板类56

    2.4线性链表的其他变形62

    2.4.1循环单链表62

    2.4.2双向链表65

    2.5单链表的应用: 多项式及其运算69

    2.5.1多项式的...

精彩书评more >

标题

评论

版权所有(C)2022 清华大学出版社有限公司 京ICP备10035462号 京公网安备11010802013248号

联系我们 | 网站地图 | 法律声明 | 友情链接 | 盗版举报 | 人才招聘