编辑推荐
《数据结构(第2版)》特色:
《数据结构(第2版)》的主要任务是介绍并探讨有关数据组织、算法设计、时间和空间效率的概念和通用分析方法,帮助读者学会数据的组织方法和现实世界问题在计算机内部的表示方法,针对问题的应用背景分析,选择合适的数据结构,从而培养高级程序设计技能。
从实际应用问题出发,导出各种经典数据结构的定义、实现(存储)方法以及操作实现,并以更丰富的综合应用案例帮助读者增强对理论的感性认识,从而明白这些数据结构为什么存在、以及在什么情况下可以解决什么样的问题。
提供了丰富的学习资源,包括源代码及配套电子课件、浙江大学提供的在线系统PTA、《数据结构学习与实验指导(第2版)》等。读者可以通过使用这些学习资源随时检测自己的学习效果与编程能力。
内容简介
《数据结构(第2版)》的主要任务是介绍并探讨有关数据组织、算法设计、时间和空间效率的概念和通用分析方法,帮助读者学会数据的组织方法和现实世界问题在计算机内部的表示方法,针对问题的应用背景分析,选择合适的数据结构,从而培养高级程序设计技能。
《数据结构(第2版)》第1章介绍了数据结构与算法的基本概念;第2章是对C语言关键内容的复习,为后续章节理解数据结构的实现做准备;第3章至第7章分别介绍了线性表、树、散列表、图、排序算法等经典数据结构与算法;最后在第8章通过对两个实际生活中提炼出的问题的解答,帮助读者更深刻地体会数据结构的应用。
《数据结构(第2版)》可作为高等学校计算机类专业“数据结构”课程的教材。
作者简介
陈越,浙江大学计算机科学与技术学院教授,教育部高等学校软件工程专业教学指导委员会委员。为程序设计能力标准化测试(PAT)系统的创始人。与何钦铭教授共同在“中国大学MOOC”和网易“云课程”平台开设在线开放课程“数据结构”,注册人数累计超过8万人。为国家精品课程“软件工程”、国家双语示范课程“数据结构与算法”、国家教学团队“程序设计系列课程教学团队”的负责人。曾获教学成果二等奖、浙江省教学成果一等奖、宝钢优秀教师奖等。
内页插图
目录
第1章 概论
1.1 引子
1.2 数据结构
1.2.1 定义
1.2.2 抽象数据类型
1.3 算法
1.3.1 定义
1.3.2 算法复杂度
1.3.3 渐进表示法
1.4 应用实例:最大子列和问题
本章小结
习题
第2章 数据结构实现基础
2.1 引子
2.2 数据存储基础
2.2.1 数组
2.2.2 类型定义typedef
2.2.3 指针
2.2.4 结构
2.2.5 链表
2.3 流程控制基础
2.3.1 分支控制
2.3.2 循环控制
2.3.3 函数与递归
本章小结
习题
第3章 线性结构
3.1 引子
3.2 线性表的定义与实现
3.2.1 线性表的定义
3.2.2 线性表的顺序存储实现
3.2.3 线性表的链式存储实现
3.2.4 广义表与多重链表
3.3 堆栈
3.3.1 堆栈的定义
3.3.2 堆栈的实现
3.3.3 堆栈应用:表达式求值
3.4 队列
3.4.1 队列的定义
3.4.2 队列的实现
3.5 应用实例
3.5.1 多项式加法运算
3.5.2 迷宫问题
本章小结
习题
第4章 树
4.1 引子
4.1.1 问题的提出
4.1.2 查找
4.2 树的定义、表示和术语
4.3 二叉树
4.3.1 二叉树的定义及其逻辑表示
4.3.2 二叉树的性质
4.3.3 二叉树的存储结构
4.3.4 二叉树的操作
4.4 二叉搜索树
4.4.1 二叉搜索树的定义
4.4.2 二叉搜索树的动态查找
4.4.3 二叉搜索树的插入
4.4.4 二叉搜索树的删除
4.5 平衡二叉树
4.5.1 平衡二叉树的定义
4.5.2 平衡二叉树的调整
4.6 树的应用
4.6.1 堆及其操作
4.6.2 哈夫曼树
4.6.3 集合及其运算
本章小结
习题
第5章 散列查找
5.1 引子
5.2 基本概念
5.3 散列函数的构造方法
5.3.1 数字关键词的散列函数构造
5.3.2 字符串关键词的散列函数构造
5.4 处理冲突的方法
5.4.1 开放定址法
5.4.2 分离链接法
5.5 散列表的性能分析
5.6 应用实例
本章小结
习题
第6章 图
6.1 引子
6.2 图的基本概念
6.2.1 图的定义和术语
6.2.2 图的抽象数据类型
6.3 图的存储结构
6.3.1 邻接矩阵
6.3.2 邻接表
6.4 图的遍历
6.4.1 迷宫探索
6.4.2 深度优先搜索
6.4.3 广度优先搜索
6.5 最小生成树
6.5.1 生成树的构建与最小生成树的概念
6.5.2 构造最小生成树的Prim算法
6.5.3 构造最小生成树的Kruskal算法
6.6 最短路径
6.6.1 单源最短路径
6.6.2 每一对顶点之间的最短路径
6.7 拓扑排序
6.8 关键路径计算
6.9 应用实例
6.9.1 六度空间理论
6.9.2 六度分隔理论的验证
本章小结
习题
第7章 排序
7.1 引子
7.2 选择排序
7.2.1 简单选择排序
7.2.2 堆排序
7.3 插入排序
7.3.1 简单插入排序
7.3.2 希尔排序
7.4 交换排序
7.4.1 冒泡排序
7.4.2 快速排序
7.5 归并排序
7.6 基数排序
7.6.1 桶排序
7.6.2 基数排序
7.6.3 单关键字的基数分解
7.7 外部排序
7.8 排序的比较和应用
7.8.1 排序算法的比较
7.8.2 排序算法应用案例
本章小结
习题
第8章 综合应用案例分析
8.1 银行排队问题
8.1.1 单队列多窗口服务
8.1.2 单队列多窗口+VIP服务
8.2 畅通工程问题
8.2.1 建设道路数量问题
8.2.2 最低成本建设问题
本章小结
习题
附录PTA使用说明
参考文献
前言/序言
“数据结构”是计算机类专业的重要专业基础课。它所讨论的知识内容和提倡的技术方法,无论对进一步学习计算机相关领域的其他课程,还是对从事大型信息工程的开发,都有着枢纽的作用。
解决问题往往有多种方法,且不同方法之间的效率可能相差甚远。解决问题方法的效率,与数据的组织方式有关,与空间的利用效率有关,也与方法的巧妙程度有关。本书的主要任务是介绍并探讨有关数据组织、算法设计、时间和空间效率的概念和通用分析方法,帮助读者学会数据的组织方法和现实世界问题在计算机内部的表示方法,针对问题的应用背景分析,选择合适的数据结构,从而培养高级程序设计技能。
本书的特点是从实际应用问题出发,导出各种经典数据结构的定义、实现(存储)方法以及操作实现,并以更丰富的综合应用案例帮助读者增强对理论的感性认识,从而明白这些数据结构为什么存在,以及在什么情况下可以最好地解决什么样的问题。
数据结构的思想和原理是不依赖于编程语言的,但对于每一个抽象概念的具体实现和应用则需要一种编程语言作为载体。本书根据国内多数学校计算机专业教学的实际情况,选择了C语言作为具体实现的语言,并提供了大量可以直接编译运行的源代码。不仅使得学生在学习时容易起步,可以在现有源代码的基础上不断修改扩充,从而解决更为复杂的问题,而且也为IT专业人士提供了方便的经典代码库。
本书第1章介绍了数据结构与算法的基本概念和两者的关联,重点介绍了抽象数据类型和算法复杂度的概念;第2章基本上是对C语言关键内容的复习,为后续章节理解数据结构的实现做准备;第3章介绍了线性表以及最基本的两种应用——堆栈和队列;第4章讨论一种重要的非线性结构——树,重点介绍了二叉树和搜索树,并将查找、哈夫曼树和集合表示等作为树形结构的应用进行了讨论;第5章通过对从海量信息中高效查找关键字问题的再思考,引出对散列表和经典哈希映射技术的讨论;第6章介绍图的各种表示方法和相关算法;第7章讨论了各种经典的排序算法;最后在第8章通过对两个实际生活中提炼出的问题的求解,帮助读者更深刻体会数据结构的应用。
读者可以根据自身的基础选择相应章节进行阅读,熟悉C语言的读者完全可以跳过第2章有关C语言基础的部分。目录中带*号的章节及习题中带*号的题目,是本书的扩展内容,读者可以在学习基础内容之后再阅读扩展内容。
本书作为第2版,除了修订第1版的错误外,还重新整理了全部源代码,提供了部分微视频,并提供了新的在线练习资源。希望读者能通过本书的学习提高实践能力,使数据结构与算法成为用计算机解决实际问题的有效工具。
《数据结构(第2版)》—— 洞悉算法世界的基石,驱动高效计算的引擎 在这信息爆炸的时代,数据以惊人的速度增长和流动,如何有效地组织、存储和处理这些数据,已成为计算机科学领域的核心挑战。 《数据结构(第2版)》正是为了应对这一挑战而生,它将带您深入探索构成现代软件系统根基的精妙设计与强大逻辑。本书并非简单罗列枯燥的概念,而是以清晰的脉络,引导读者一步步构建起对数据组织方式的深刻理解,从而为开发高效、健壮的应用程序奠定坚实的基础。 核心内容概览: 本书的核心价值在于系统地介绍了各种基本和高级的数据结构,并深入阐述了它们的原理、实现方式以及在实际应用中的权衡。我们将从最基础的线性结构开始,逐步进阶到更复杂、更具表现力的非线性结构。 线性结构: 数组 (Arrays): 作为最原始也最基础的数据组织形式,数组提供了直接按索引访问元素的便利。我们将探讨数组的静态与动态特性,理解其在内存中的布局,以及在内存访问效率上的优势和局限性。 链表 (Linked Lists): 与数组的连续内存分配不同,链表通过节点间的指针连接,提供了灵活的插入和删除操作。本书将详细介绍单向链表、双向链表以及循环链表,分析它们在空间和时间复杂度上的特性,并展示如何在实际场景中有效运用。 栈 (Stacks) 和队列 (Queues): 这两种遵循特定访问规则(LIFO for stacks, FIFO for queues)的抽象数据类型,是许多算法和系统设计的基石。我们将学习它们的实现方法,如基于数组或链表,并重点理解它们在函数调用、表达式求值、任务调度等领域的广泛应用。 非线性结构: 树 (Trees): 树形结构以其层级化的组织方式,在数据检索、排序和表示层次关系方面发挥着至关重要的作用。 二叉树 (Binary Trees): 特别是二叉搜索树 (Binary Search Trees, BST),我们将深入研究其查找、插入、删除等操作的算法,并探讨平衡二叉树(如AVL树、红黑树)的出现,以解决普通二叉搜索树可能出现的性能退化问题。 堆 (Heaps): 最大堆和最小堆是优先队列的常用实现方式,它们在排序算法(如堆排序)和需要高效查找最大/最小元素的场景中表现出色。 B树和B+树 (B-Trees and B+Trees): 对于大规模数据的存储和检索,特别是数据库和文件系统,B树及其变种(如B+树)提供了优化的多路查找策略,大幅提升了磁盘I/O效率。 图 (Graphs): 图作为一种能表示复杂关系的通用数据结构,在网络分析、路径查找、社交网络建模等领域无处不在。 图的表示: 我们将学习邻接矩阵和邻接表这两种主要的图表示方法,并分析各自的优缺点。 图的遍历: 深度优先搜索 (DFS) 和广度优先搜索 (BFS) 是图遍历的基础算法,我们将详细解析它们的实现原理和应用。 经典图算法: 包括最短路径算法(Dijkstra, Floyd-Warshall)、最小生成树算法(Prim, Kruskal)等,这些算法为解决实际问题提供了强大的工具。 哈希表 (Hash Tables): 哈希表通过哈希函数将键映射到数组的索引,提供近乎常数时间的平均查找、插入和删除操作。我们将探讨不同的哈希函数设计思想、冲突解决方法(如链地址法、开放寻址法)以及它们在查找、缓存和数据检索中的高效应用。 本书的特点与价值: 《数据结构(第2版)》不仅仅是一本技术手册,更是一次思维的训练。本书着力于培养读者: 1. 严谨的逻辑思维: 理解不同数据结构的设计理念,分析其内在逻辑,从而能够清晰地思考和表达算法的步骤。 2. 问题解决的能力: 掌握如何根据具体问题的需求,选择最适合的数据结构和算法,实现最高效的解决方案。 3. 性能优化的意识: 深入理解各种操作的时间复杂度和空间复杂度,从而能够在设计时就考虑性能瓶颈,并进行有效的优化。 4. 编程实践的指导: 提供清晰的伪代码和可能的代码实现示例,帮助读者将理论知识转化为实际的编程能力。 谁适合阅读本书? 本书适合所有希望深入理解计算机科学核心概念的开发者、计算机专业学生,以及对算法和高效编程感兴趣的爱好者。无论您是初学者,还是有一定开发经验的工程师,本书都将为您提供宝贵的知识财富,帮助您在技术道路上更上一层楼。 掌握数据结构,就是掌握了构建高效、智能软件世界的关键钥匙。《数据结构(第2版)》期待与您一同踏上这段探索数据之美、算法之妙的旅程。
我是一名对编程充满热情的技术爱好者,喜欢钻研各种技术细节。《数据结构(第2版)》这本书,给我带来了很多惊喜。它在讲解过程中,不仅仅停留在理论层面,还穿插了大量的代码示例,并且这些代码示例都经过了精心的优化和测试。作者在讲解时,会详细解释每一行代码的含义,以及它如何实现特定的数据结构操作。比如,在讲解链表的插入和删除操作时,作者给出了非常清晰的 C++ 代码实现,并且对指针的指向和节点的链接过程进行了详细的图解,让我能够一步步地理解代码的执行逻辑。