普通高等学院校计算机专业(本科)实用教程系列:数据结构实用教程

普通高等学院校计算机专业(本科)实用教程系列:数据结构实用教程 pdf epub mobi txt 电子书 下载 2025

徐孝凯 著
图书标签:
  • 数据结构
  • 实用教程
  • 计算机专业
  • 本科
  • 高等教育
  • 算法
  • C++或Java(根据教材语言选择)
  • 教学参考书
  • 教材
  • 计算机科学
想要找书就要到 静流书站
立刻按 ctrl+D收藏本页
你会得到大惊喜!!
出版社: 清华大学出版社
ISBN:9787302133971
版次:2
商品编码:10155419
品牌:清华大学
包装:平装
开本:16开
出版时间:2006-09-01
用纸:胶版纸
页数:372

具体描述

编辑推荐

  

本书是为全国高等院校计算机及相关专业开设数据结构课程而精心组织和编著的一本实用教材。它从1999年出版以来,累计重印近30次,总销量超过十一万册,深受广大读者和专家的好评,相继被许多高校选定为教科书和考研参考书,并被列选为“十一五”规划教材。


内容简介

  本书是为全国高等院校计算机及相关专业开设数据结构课程而精心组织和编著的一本实用教材。它从1999年出版以来,一直深受广大读者和专家的好评,相继被许多高校选定为教科书和考研参考书,并被列选为“十一五”规划教材。这次对本书进行了认真和全面的修订,形成第2版,相信会得到更广泛的认可,对数据结构学科的教学和发展产生积极的影响。
  本书从计算机学科发展和应用的实际需要出发,对各种常用的数据结构,从逻辑结构、存储结构、运算种类、运算方法和算法等各个方面进行了深入细致的解剖和分析,使读者更容易理解基本概念和知识,能够轻松地进行算法设计和上机操作的训练,大大提高软件开发与设计的专业能力。
  另外,与本书配套的习题参考解答也一并被修订和出版,为广大自学读者提供方便。

目录

第1章 绪论 1
1.1 常用术语 1
1.2 算法描述 11
1.3 算法评价 13
*1.4 与算法描述有关的C++知识 19
1.4.1 包含文件语句 20
1.4.2 数据类型 28
1.4.3 函数 36
1.4.4 运算符重载 41
习题1 43
第2章 线性表 48
2.1 线性表的定义和抽象数据类型 48
2.1.1 线性表的定义 48
2.1.2 线性表的抽象数据类型 49
2.1.3 操作举例 50
2.2 线性表的顺序存储和操作实现 51
2.2.1 线性表的顺序存储结构 51
2.2.2 顺序存储下的线性表操作的实现 53
*2.3 线性表应用举例 62
2.4 线性表的链接存储结构 67
2.5 线性表操作在单链表上的实现 75
*2.6 多项式计算 83
2.6.1 多项式表示与求值 83
2.6.2 两个多项式相加 88
习题2 91
第3章 集合、稀疏矩阵和广义表 94
3.1 集合的定义和抽象数据类型 94
3.1.1 集合定义 94
3.1.2 集合的抽象数据类型 94
3.2 集合的顺序存储结构和操作实现 95
3.3 集合的链接存储结构和操作实现 102
3.4 稀疏矩阵 108
3.4.1 稀疏矩阵的定义 108
3.4.2 稀疏矩阵的存储结构 110
*3.4.3 稀疏矩阵的运算 113
3.5 广义表 120
3.5.1 广义表的定义 120
3.5.2 广义表的存储结构 122
3.5.3 广义表的运算 123
3.5.4 简单程序举例 127
习题3 128
第4章 栈和队列 131
4.1 栈 131
4.1.1 栈的定义 131
4.1.2 栈的抽象数据类型 131
4.2 栈的顺序存储结构和操作实现 132
4.3 栈的链接存储结构和操作实现 136
4.4 栈的简单应用举例 138
4.5 算术表达式的计算 142
4.5.1 算术表达式的两种表示 142
4.5.2 后缀表达式求值的算法 144
4.5.3 把中缀表达式转换为后缀表达式的算法 146
4.6 栈与递归 150
4.7 队列 160
4.7.1 队列的定义 160
4.7.2 队列的抽象数据类型 161
4.7.3 队列的顺序存储结构和操作实现 162
4.7.4 队列的链接存储结构和操作实现 165
*4.8 队列应用举例 169
习题4 173
第5章 树 178
5.1 树的概念 178
5.1.1 树的定义 178
5.1.2 树的表示 180
5.1.3 树的基本术语 181
5.1.4 树的性质 182
5.2 二叉树 183
5.2.1 二叉树的定义 183
5.2.2 二叉树的性质 184
5.2.3 二叉树的抽象数据类型 186
5.2.4 二叉树的存储结构 187
5.3 二叉树遍历 189
5.4 二叉树其他运算 193
5.5 树的存储结构和运算 198
5.5.1 树的抽象数据类型 198
5.5.2 树的存储结构 199
5.5.3 树的运算 201
习题5 207
第6章 特殊二叉树 212
6.1 二叉搜索树 212
6.1.1 二叉搜索树的定义 212
6.1.2 二叉搜索树的抽象数据类型 212
6.1.3 二叉搜索树的运算 213
6.2 堆 220
6.2.1 堆的定义 220
6.2.2 堆的抽象数据类型 221
6.2.3 堆的存储结构 221
6.2.4 堆的运算 222
6.3 哈夫曼树 227
6.3.1 基本术语 227
6.3.2 构造哈夫曼树 228
*6.3.3 哈夫曼编码 231
*6.4 线索二叉树 234
6.4.1 二叉树的线索化 234
6.4.2 利用线索进行遍历 238
*6.5 平衡二叉树 241
6.5.1 平衡二叉树的定义 241
6.5.2 平衡二叉树的调整 242
习题6 247
第7章 图 249
7.1 图的概念 249
7.1.1 图的定义 249
7.1.2 图的基本术语 250
7.1.3 图的抽象数据类型 253
7.2 图的存储结构 254
7.2.1 邻接矩阵 254
7.2.2 邻接表 257
7.2.3 边集数组 262
7.3 图的遍历 264
7.3.1 深度优先搜索遍历 264
7.3.2 广度优先搜索遍历 267
7.3.3 非连通图的遍历 269
习题7 271
第8章 图的应用 273
8.1 图的生成树和最小生成树 273
8.1.1 生成树和最小生成树的概念 273
8.1.2 普里姆算法 275
8.1.3 克鲁斯卡尔算法 278
8.2 最短路径 281
8.2.1 最短路径的概念 281
8.2.2 从一顶点到其余各顶点的最短路径 282
*8.2.3 每对顶点之间的最短路径 286
8.3 拓扑排序 290
8.3.1 拓扑排序的概念 290
8.3.2 拓扑排序算法 293
*8.4 关键路径 296
8.4.1 顶点事件的发生时间 296
8.4.2 计算关键路径的方法和算法 299
习题8 302
第9章 查找 305
9.1 查找的概念 305
9.2 顺序表查找 306
9.2.1 顺序查找 306
9.2.2 二分查找 307
9.3 索引查找 311
9.3.1 索引的概念 311
9.3.2 索引查找算法 314
*9.3.3 分块查找 316
9.4 散列查找 317
9.4.1 散列的概念 317
9.4.2 散列函数 319
9.4.3 处理冲突的方法 321
9.4.4 散列表的运算 324
9.5 B树查找 328
9.5.1 B_树定义 328
9.5.2 B_树查找 330
9.5.3 B_树插入 332
9.5.4 B_树删除 335
*9.5.5 对B_树的其他运算 337
*9.5.6 B+树简介 340
习题9 341
第10章 排序 343
10.1 排序的基本概念 343
10.2 插入排序 344
10.2.1 直接插入排序 345
*10.2.2 希尔排序 346
10.3 选择排序 347
10.3.1 直接选择排序 347
10.3.2 堆排序 348
10.4 交换排序 352
10.4.1 气泡排序 352
10.4.2 快速排序 354
10.5 归并排序 357
*10.6 各种内排序方法的比较 360
*10.7 外排序 362
10.7.1 外排序的概念 362
10.7.2 外排序算法 364
习题10 371

前言/序言

本书第一版出版至今已近7年,随着计算机数据结构学科的不断发展和教学的改革需要,在第一版的基础上,整理和加工形成了第二版。

第一版教材深受读者的喜爱,连续14次印刷,发行7万余册,被许多高校选定为教材和考研参考书。有许多读者在网站上发表评论,赞扬本书的风格和特色。

第二版对第一版的内容进行了优化和适当增删,并对一些章节进行了调整,由第1版中的8章修订为10章。原来的第5章“树”,改为第5章的“树和二叉树”和第6章的“特殊二叉树”两章,原来的第6章“图”,改为第7章“图”和第8章“图的应用”两章。

在第二版教材中,增加了“堆”结构的内容、集合结构的内容、线性表应用的内容、栈与队列应用的内容等;扩充了栈与递归应用的实例、二叉树和树查找运算的算法、生成哈夫曼树的算法、对B_树的插入算法等;修改了从二叉搜索树中删除结点的算法、对外存文件进行排序的算法等。当然还对许多内容进行了修改,力争反映该学科的先进性和科学性,反映作为教材的系统性、实用性和可读性。

第2版的内容较丰富,在目录、例题或习题中带星号“*”的内容可以不作为讲授内容和教学要求,留给学生自学。

书中所有算法和程序都在Visual C++ 6.0开发环境下调试运行通过,使得其正确性和有效性得到了进一步验证。

数据结构教材的内容包括两个层面:逻辑层面和实现层面。在逻辑层面上,介绍的是各种数据结构的特点,在每种数据结构上进行插入、删除、查找、遍历等相应运算的方  法,不涉及在计算机上实现运算的算法;在实现层面上,讨论的是如何把对数据结构进行运算的方法和步骤转换为用一种计算机程序设计语言描述的算法,并能够实际运行和得到验证。逻辑层面的学习是基本的和必需的,实现层面的学习是进一步的,对于计算机及信息类专业的学生,这两步都要学,而且都要学好,对于经管农林等类的学生,则应侧重   第1步。

数据结构课程是一门理论性和实践性都很强的课程,只有通过亲自编写算法、上机运行和调试程序,才能够加深理解和掌握所学的知识,提高程序设计和软件研发能力。

使用此教材,最好具有C++语言的基础,因为书中描述的数据类型和算法都是按照C++语言的规则编写的。当然,若是只具有其他计算机语言的基础,则使用该书时应同时自学C++语言。对于一般读者来说,只要有任一种计算机语言的基础,再自学任何其他计算机语言都是不困难的。

与本书配套的《数据结构实用教程习题参考解答》也同时改版,将同此主教材一并出版发行。与本书配套的《数据结构课程实验》一书暂时不需改版,仍可继续与这本第二版主教材配套使用。

在由清华大学出版社组织的此套系列教材中,本人还编著了《C++语言基础教程》一书,该书已重印十多次,便于自学,读者反映较好,并被列选为国家“十一五”规划教材,不妨推荐给读者参考。

衷心希望通过这次改版,使《数据结构实用教程》一书更加受到读者的爱戴和好评,也同时希望读者继续给予批评指正,本人深表谢意!

作者电子邮箱:xuxk@crtvu.edu.cn,联系电话:010-64910302。



徐孝凯

2006年8月



数据结构在计算机科学中的核心地位与实际应用 数据结构,作为计算机科学领域中最基础、最核心的学科之一,其重要性不言而喻。它不仅是理解复杂算法和程序设计的基石,更是解决实际计算问题的关键。掌握高效的数据组织和存储方法,能够显著提升程序的运行效率,优化资源利用,从而在信息爆炸的时代脱颖而出。 一、 数据结构的概念与演进 数据结构,顾名思义,是指一组数据的组织方式,即数据元素之间的相互关系以及数据在内存中的存储方式。这种组织方式直接影响到数据的访问、操作以及整体程序的效率。从最简单的线性结构(如数组、链表)到复杂的非线性结构(如树、图),再到更抽象的集合、映射等,数据结构的演进反映了计算机科学对信息处理能力不断提升的追求。 线性结构: 数组 (Array): 连续存储,通过索引快速访问,但插入和删除操作效率较低。在需要频繁随机访问的场景下表现优异,例如存储一组固定大小的学生成绩。 链表 (Linked List): 动态存储,节点间通过指针连接。插入和删除操作效率高,尤其适用于需要频繁增删元素的数据集,如实现动态数组或管理任务队列。单向链表、双向链表以及循环链表提供了不同的灵活性。 栈 (Stack): 后进先出(LIFO)的抽象数据类型。常用于函数调用栈、表达式求值、括号匹配等场景。 队列 (Queue): 先进先出(FIFO)的抽象数据类型。广泛应用于任务调度、缓冲区的实现、广度优先搜索(BFS)等。 非线性结构: 树 (Tree): 具有层次关系的数据结构,每个节点有零个或多个子节点。 二叉树 (Binary Tree): 每个节点最多有两个子节点。二叉搜索树(BST)及其变种(如AVL树、红黑树)提供了高效的查找、插入和删除操作,是许多数据库索引和查找算法的基础。 堆 (Heap): 特殊的完全二叉树,通常用于实现优先队列,能够高效地获取最大或最小值。 B树及其变种 (B-Tree, B+ Tree): 主要用于磁盘存储系统,如数据库和文件系统,以减少磁盘I/O次数。 图 (Graph): 由顶点(节点)和边(连接顶点的线)组成。图结构能够表示现实世界中各种复杂的关联关系,如社交网络、交通路线、计算机网络拓扑等。 有向图 (Directed Graph): 边具有方向。 无向图 (Undirected Graph): 边没有方向。 加权图 (Weighted Graph): 边带有权重,常用于计算最短路径(如Dijkstra算法、Floyd-Warshall算法)。 树结构可以看作是图的一种特殊形式。 散列表 (Hash Table): 通过哈希函数将键映射到存储位置,实现平均O(1)的查找、插入和删除操作。是实现字典(Map)和集合(Set)等数据结构的核心。冲突处理(如链地址法、开放地址法)是散列表设计的关键。 二、 数据结构在算法设计中的作用 算法与数据结构是相辅相成的。一个高效的算法往往依赖于合适的数据结构来组织和管理数据,而数据结构的设计也需要考虑如何支持特定的算法操作。 查找算法: 顺序查找 (Sequential Search): 适用于无序或小规模数据集。 二分查找 (Binary Search): 仅适用于有序数组,效率极高(O(log n))。 散列表查找: 平均O(1)的查找效率,是现代系统中广泛使用的查找方式。 树结构查找: 如二叉搜索树的查找,时间复杂度与树的平衡度有关。 排序算法: 冒泡排序 (Bubble Sort)、选择排序 (Selection Sort)、插入排序 (Insertion Sort): 简单易懂,但时间复杂度较高(O(n^2)),适用于小规模数据。 快速排序 (Quick Sort)、归并排序 (Merge Sort): 平均时间复杂度为O(n log n),是常用的高效排序算法。 堆排序 (Heap Sort): 利用堆结构实现,时间复杂度为O(n log n),原地排序。 基数排序 (Radix Sort)、桶排序 (Bucket Sort): 非比较排序,在特定条件下效率极高。 图算法: 深度优先搜索 (DFS) 和 广度优先搜索 (BFS): 常用于图的遍历、连通性判断、拓扑排序等。 Dijkstra 算法: 计算单源最短路径(非负权)。 Floyd-Warshall 算法: 计算所有顶点对之间的最短路径。 Prim 算法 和 Kruskal 算法: 计算最小生成树。 三、 数据结构在实际应用中的体现 数据结构的应用无处不在,深刻地影响着我们日常使用的各种软件和系统。 操作系统: 进程调度(队列)、内存管理(链表、散列表)、文件系统(B树、索引结构)。 数据库系统: 索引(B+树)、数据存储(各种优化结构)、查询优化(数据结构分析)。 网络通信: 路由表(图)、数据包缓冲(队列)、DNS解析(散列表)。 编译器: 语法分析(树)、符号表(散列表)。 图形学: 场景管理(树)、碰撞检测(空间分割结构)。 人工智能与机器学习: 模型表示(图、张量)、数据预处理(各种数据结构)。 Web 开发: DOM树(树)、缓存(散列表)、会话管理(散列表)。 游戏开发: 寻路(图算法)、物理引擎(空间数据结构)。 四、 学习数据结构的价值与方法 深入理解数据结构,不仅能帮助我们写出更优美的代码,更能培养严谨的逻辑思维和解决复杂问题的能力。 培养抽象思维: 数据结构将具体的数据操作抽象成通用的模型,有助于我们从更高层次理解问题。 提升编程效率: 选择合适的数据结构能够显著减少程序运行时间和内存占用。 夯实计算机科学基础: 数据结构是算法、操作系统、数据库等众多计算机科学分支的基础。 应对面试挑战: 数据结构和算法是技术面试的重点考察内容。 学习数据结构,需要理论与实践相结合。理解各种数据结构的定义、特性、优缺点,学习相关的基本操作和算法,并通过编程实践来加深理解。从简单的数组和链表入手,逐步掌握树、图、散列表等复杂结构,并尝试用它们来解决实际问题,如实现一个简单的文件管理系统、构建一个社交网络关系图等。 五、 结语 数据结构是计算机科学的灵魂,是构建高效、智能系统的基石。掌握扎实的数据结构知识,将为未来的学习和职业发展奠定坚实的基础,使您能够更好地理解和驾驭不断发展的计算机技术,解决更具挑战性的实际问题。

用户评价

评分

我是一位有着多年教学经验的大学老师,一直致力于为学生寻找最适合的计算机专业教材。在我的印象中,很多数据结构教材都过于枯燥,理论性太强,导致学生在学习过程中容易产生畏难情绪,甚至对这门学科产生抵触。直到我接触到这本《数据结构实用教程》,我才找到了真正能够激发学生学习兴趣的教材。这本书在内容呈现上非常生动有趣,作者善于运用类比和比喻,将抽象的数据结构概念形象化。例如,在讲解栈和队列时,它用了排队买票和叠盘子的生动例子,让学生能够立刻理解它们“先进先出”和“后进先出”的特性。此外,本书在算法的讲解上也独具匠心,不仅仅停留在代码层面,还深入分析了算法的设计思路和优化方法,引导学生进行批判性思考。书中提供的章节练习题难度适中,既能巩固基础,又能拓展思维,非常适合作为课堂练习和课后作业。更值得一提的是,本书对图结构和图算法的讲解非常透彻,这是很多教材中容易被忽视或者讲解不清晰的部分,而这本书的处理方式让我眼前一亮。我认为,这本教材不仅能够帮助学生掌握扎实的数据结构知识,更能培养他们解决实际问题的能力,是一名优秀的计算机专业教材。

评分

这本《数据结构实用教程》真是一本宝藏!我是一名大二计算机专业的学生,之前学习数据结构的时候感觉概念太多,代码实现也总是模棱两可,光看书上的理论,脑子里一团浆糊。直到我翻开这本教程,才感觉豁然开朗。它在讲解每一个数据结构的时候,都非常注重理论与实践的结合。比如讲到链表,不仅仅是文字描述,还配有清晰的图示,让你能直观地理解节点之间的关系,以及插入、删除等操作是如何进行的。更重要的是,书中提供的代码示例非常贴近实际,而且都有详细的注释,对于我这种初学者来说,简直是救星。我尝试着敲了几遍代码,甚至还自己动手修改了一些细节,发现理解起来比之前容易太多了。这本书的语言风格也很友善,没有太多生涩难懂的术语,即使遇到不熟悉的词汇,作者也会在后面给出解释,让我学习起来没有太大的压力。我尤其喜欢书中关于算法分析的部分,它用通俗易懂的方式解释了时间复杂度和空间复杂度,并且通过一些实际例子,让我理解了为什么选择某种数据结构会影响程序的效率。总的来说,这本书为我打下了坚实的数据结构基础,让我对后续的学习充满了信心。

评分

我对数据结构一直感到很头疼,总觉得抽象的概念难以理解,代码实现更是让人一头雾水。偶然间,我看到了这本《数据结构实用教程》,抱着试试看的心态买来翻阅。结果出乎意料的好!这本书的讲解方式非常新颖,它不仅仅是枯燥的理论堆砌,而是融入了大量的图示和动画演示(虽然是书本形式,但文字描述足够生动,仿佛能看到画面)。我以前对二叉树的理解总是模糊不清,看了这本书关于树的章节,特别是平衡二叉树和 B 树的介绍,结合书中详细的图解,我一下子就明白了它们是怎么运作的。书中的代码也非常人性化,不仅仅是给出功能实现,还会在关键步骤进行详细的解释,让我知道为什么这么写,以及每行代码的作用。我尝试着跟着敲了一遍,然后自己尝试修改,发现对代码的理解程度大大提高。而且,这本书还穿插了一些趣味性的例子,比如用图结构来表示社交网络,用栈来模拟函数调用栈,这些都让学习过程变得更加有趣。对于像我这样,需要“看得懂”才能“学得会”的学生来说,这本书简直是福音,大大降低了学习门槛,让我对数据结构这门课重拾了信心。

评分

我是一名即将毕业的本科生,在准备研究生考试的过程中,数据结构是必考科目,也是我的弱项。我之前也看过几本专门针对考研的数据结构书,但感觉它们要么过于理论化,要么题型比较单一,很难真正掌握核心概念。这本《数据结构实用教程》恰恰弥补了这些不足。它在内容编排上非常有条理,从基础的线性结构,到复杂的树形结构和图结构,层层递进,逻辑清晰。我特别欣赏作者在介绍各种算法时,不仅仅给出代码,还会深入剖析算法的思想和优劣。例如,在讲到排序算法时,它不仅列举了冒泡排序、选择排序等基础算法,还详细介绍了快速排序、归并排序等高效算法,并对其时间复杂度进行了详细的推导。这本书最大的亮点在于它提供的实践项目,让我有机会将所学的知识运用到实际问题中。比如,书中的一个项目是设计一个图书管理系统,让我用到了链表和散列表来存储和查询图书信息。通过完成这个项目,我不仅巩固了数据结构和算法的知识,还学会了如何将理论知识转化为实际应用。这本书的深度和广度都非常适合我这种需要系统性复习的考生。

评分

作为一名多年的IT从业者,在工作中有时候会遇到需要优化代码性能的问题,而数据结构和算法正是解决这些问题的关键。我之前也零散地看过一些关于数据结构的书籍,但总是感觉不够系统,或者过于偏重理论,对于实际应用指导性不强。这本《数据结构实用教程》给我带来了惊喜。它在讲解每一个数据结构时,都非常注重其在实际场景中的应用,例如在讲解哈希表时,就详细介绍了它在字典、数据库索引等方面的应用,并且分析了不同哈希函数和冲突解决方法对性能的影响。我特别喜欢书中关于图算法的部分,例如最短路径算法和最小生成树算法,作者不仅解释了算法的原理,还给出了具体的实现代码,并且分析了它们在网络路由、地图导航等领域的应用。更重要的是,这本书的语言风格非常接地气,避免了过多的学术术语,让我能够快速理解和掌握。我尝试着将书中的一些算法应用到我目前正在开发的一个项目中,确实带来了明显的性能提升。对于我这种已经工作,但需要巩固和深化数据结构知识的人来说,这本书提供了一个非常好的学习平台,能够帮助我更好地理解和应用数据结构知识来解决实际工作中的问题。

评分

包装没有问题,为什么坏了一个角。还脏兮兮的。要不是急用,我就退了。

评分

挺好的 没什么可说的

评分

质量不错

评分

很好,要赞一个!

评分

书好像存了很久的货,破损发霉

评分

很好的书 到货快 性价比很高

评分

...........

评分

还行吧~~~~~~~~~~~~~~~~~~~~~

评分

送给朋友的,感觉还好

相关图书

本站所有内容均为互联网搜索引擎提供的公开搜索信息,本站不存储任何数据与内容,任何内容与数据均与本站无关,如有需要请联系相关搜索引擎包括但不限于百度google,bing,sogou

© 2025 book.coffeedeals.club All Rights Reserved. 静流书站 版权所有