具体描述
本书系统讲解数据结构和算法,并分析了算法的复杂性。本书选择Jaya语言以面向对象的方式描述数据结构,还特别强调了封装和分解的信息隐藏原理。主要内容包括:面向对象编程的基本原理,判定算法效率的方法,堆栈、队列及其应用,对于多种递归的详细讨论,二叉树、B树、2-4树等的查找和遍历等,分析排序、散列等数据结构的应用,图、NP完整性,数据压缩算法、存储管理技术以及自动机理论和字符串匹配等算法。 本书适合作为高等院校计算机专业的教材,也是计算机算法方面的重要参考书。
作者简介
Adam Drozdek 毕业于美国莱特州立大学,现任迪尤肯大学计算机科学系副教授。曾出版多部著作,包括《Data Structures and Algorithms in C++》和《The Elements of Data Compression》等。
目录信息
1.1 java入门 1
1.1.1 变量的声明 1
1.1.2 运算符 3
1.1.3 选择语句 3
1.1.4 循环语句 4
1.1.5 异常处理 5
1.2 java面向对象编程 6
1.2.1 封装 6
1.2.2 抽象数据类型 12
1.2.3 继承 13
1.2.4 多态性 16
1.3 输入和输出 19
1.3.1 输入、输出字节 21
1.3.2 行输入 21
1.3.3 标志输入:单词和数字 22
1.3.4 基本数据类型的输入和输出 22
1.3.5 对象的输入和输出 23
1.3.6 随机存取文件 24
1.4 java和指针 24
1.5 java.util中的向量 28
1.6 数据结构和面向对象的编程 32
1.7 示例学习:随机存取文件 32
1.8 习题 39
1.9 编程作业 41
参考文献 42
第2章 复杂性分析 44
2.1 计算复杂性和渐近复杂性 44
2.2 大o表示法 44
2.3 大o表示法的性质 46
2.4 w和q表示法 47
2.5 可能出现的问题 48
2.6 复杂性示例 48
2.7 寻找渐近复杂性:示例 49
2.8 最好的、平均的和最坏的情况 51
2.9 平摊复杂性 53
2.10 np完整性 56
2.11 习题 58
参考文献 60
第3章 链表 62
3.1 单向链表 62
3.1.1 插入 66
3.1.2 删除 67
3.1.3 查找 70
3.2 双向链表 72
3.3 循环链表 74
3.4 跳转表 75
3.5 自组织表 80
3.6 稀疏表 83
3.7 java.util的链表 85
3.7.1 linkedlist 85
3.7.2 arraylist 89
3.8 结论 91
3.9 示例学习:图书馆 92
3.10 习题 99
3.11 编程作业 101
参考文献 103
第4章 堆栈和队列 105
4.1 堆栈 105
4.2 队列 111
4.3 优先级队列 117
4.4 示例学习:脱离迷宫 118
4.5 习题 122
4.6 编程作业 124
参考文献 125
第5章 递归 126
5.1 递归定义 126
5.2 方法调用和递归实现 128
5.3 剖析递归调用 129
5.4 尾递归 132
5.5 非尾递归 133
5.6 间接递归 137
5.7 嵌套递归 139
5.8 过分递归 139
5.9 回溯 142
5.10 小结 147
5.11 示例学习:递归下降解 推?147
5.12 习题 153
5.13 编程作业 155
参考文献 157
第6章 二叉树 158
6.1 树、二叉树和二叉查找树 158
6.2 二叉树实现 161
6.3 搜索二叉查找树 163
6.4 树的遍历 164
6.4.1 广度优先遍历 165
6.4.2 深度优先遍历 165
6.4.3 无堆栈深度优先遍历 171
6.5 插入 175
6.6 删除 178
6.6.1 归并删除法 179
6.6.2 复制删除法 181
6.7 树的平衡 183
6.7.1 dsw算法 185
6.7.2 avl树 187
6.8 自调整树 191
6.8.1 自重构树 192
6.8.2 伸展树 192
6.9 堆 196
6.9.1 堆作为优先级队列 197
6.9.2 以堆的形式组织数组 199
6.10 波兰表示法和表达式树 202
6.11 示例学习:计算单词频率 206
6.12 习题 212
6.13 编程作业 214
参考文献 217
第7章 多分树 220
7.1 b树家族 220
7.1.1 b树 221
7.1.2 b*树 229
7.1.3 b+树 230
7.1.4 前缀b+树 232
7.1.5 比特树 233
7.1.6 r树 235
7.1.7 2-4树 236
7.1.8 java.util中的树 248
7.2 检索树 257
7.3 结论 264
7.4 示例学习:拼写检查程序 264
7.5 习题 273
7.6 编程作业 274
参考文献 277
第8章 图 279
8.1 图的表示法 280 ..
8.2 图的遍历 281
8.3 最短路径 284
8.4 圈检测 291
8.5 生成树 293
8.6 连通性 297
8.6.1 无向图的连通性 297
8.6.2 有向图的连通性 300
8.7 拓扑排序 302
8.8 网络 303
8.8.1 最大流 303
8.8.2 最小代价的最大流量 311
8.9 匹配 313
8.9.1 稳定匹配问题 318
8.9.2 分配问题 319
8.9.3 非二部图中的匹配 321
8.10 欧拉图和哈密顿图 322
8.10.1 欧拉图 322
8.10.2 哈密顿图 324
8.11 图的着色 329
8.12 图论中的np完整性问题 331
8.12.1 团问题 331
8.12.2 3色问题 332
8.12.3 顶点覆盖问题 333
8.12.4 哈密顿回路问题 333
8.13 示例学习:典型代表问题 335
8.14 习题 336
8.15 编程作业 345
参考文献 346
第9章 排序 349
9.1 基本排序算法 350
9.1.1 插入排序 350
9.1.2 选择排序 352
9.1.3 冒泡排序 353
9.2 决策树 355
9.3 高效排序算法 357
9.3.1 shell排序 357
9.3.2 堆排序 360
9.3.3 快速排序 363
9.3.4 归并排序 367
9.3.5 基数排序 370
9.4 java.util中的排序 373
9.5 总结 375
9.6 示例学习:多项式加法 376
9.7 习题 383
9.8 编程作业 384
参考文献 384
第10章 散列 387
10.1 散列函数 387
10.1.1 除法 387
10.1.2 折叠法 388
10.1.3 平方取 泻 ?388
10.1.4 提取方法 388
10.1.5 基数变换 388
10.2 冲突解决 389
10.2.1 开放定址法 389
10.2.2 链 393
10.2.3 桶定址法 394
10.3 删除 394
10.4 完全散列函数 395
10.4.1 cichelli方法 396
10.4.2 fhcd算法 398
10.5 可扩展文件的散列函数 400
10.5.1 可扩展散列 400
10.5.2 线性散列 402
10.6 java.util中的散列 404
10.6.1 hashmap 404
10.6.2 hashset 407
10.6.3 hashtable 410
10.7 示例学习:桶散列 414
10.8 习题 421
10.9 编程作业 422
参考文献 423
第11章 数据压缩 425
11.1 数据压缩的条件 425
11.2 赫夫曼编码 426
11.3 顺串长度编码 436
11.4 ziv-lempel编码 437
11.5 示例学习:结合顺串长度编码的 赫夫曼方法 439
11.6 习题 448
11.7 编程作业 448
参考文献 449
第12章 存储管理 451
12.1 顺序适配方法 451
12.2 非顺序适配算法 452
12.3 无用单元收集 459
12.3.1 标记和清除算法 459
12.3.2 复制方法 465
12.3.3 增量式无用单元收集 466
12.4 总结 471
12.5 示例学习:内置无用单元收集器 472
12.6 习题 473
12.7 编程作业 479
参考文献 481
第13章 字符串匹配 484
13.1 精确字符串匹配 484
13.1.1 直接匹配算法 484
13.1.2 knuth-morris-pratt算法 486
13.1.3 boyer-moore算法 492
13.1.4 多路查找 500
13.1.5 面向位方法 501
13.1.6 词匹配集 504
13.1.7 正则表达式匹配 510
13.1.8 后缀检索树和树 513
13.1.9 后缀数组 517
13.2 近似字符串匹配 518
13.2.1 字符串相似度 519
13.2.2 k误配的字符串匹配 524
13.3 示例学习:最长公共子字符串 526
13.4 习题 533
13.5 编程作业 535
参考文献 535
附录a 大o的计算 537
a.1 谐波级数 537
a.2 函数lg (n!) 的近似 537
a.3 快速排序平均情况的大o 538
a.4 随机二叉树中的平均路径长度 540
a.5 avl树中的节点数量 541
附录b np完整性 542
索引 554
· · · · · · (收起)
读后感
这是一本老书了。我看的时候也是很早之前了,但是这又是一本赖看的书。与其他的技术书籍不同,这本书是一本生命很长的书,也是值得反复阅读的。 这本书以当时看来十分先进的java语言作为载体,把经典的数据结构和算法梳理了一遍,对于初学者的帮助是很大。 另外书里每一章都给...
这是一本老书了。我看的时候也是很早之前了,但是这又是一本赖看的书。与其他的技术书籍不同,这本书是一本生命很长的书,也是值得反复阅读的。 这本书以当时看来十分先进的java语言作为载体,把经典的数据结构和算法梳理了一遍,对于初学者的帮助是很大。 另外书里每一章都给...
这是一本老书了。我看的时候也是很早之前了,但是这又是一本赖看的书。与其他的技术书籍不同,这本书是一本生命很长的书,也是值得反复阅读的。 这本书以当时看来十分先进的java语言作为载体,把经典的数据结构和算法梳理了一遍,对于初学者的帮助是很大。 另外书里每一章都给...
这是一本老书了。我看的时候也是很早之前了,但是这又是一本赖看的书。与其他的技术书籍不同,这本书是一本生命很长的书,也是值得反复阅读的。 这本书以当时看来十分先进的java语言作为载体,把经典的数据结构和算法梳理了一遍,对于初学者的帮助是很大。 另外书里每一章都给...
这是一本老书了。我看的时候也是很早之前了,但是这又是一本赖看的书。与其他的技术书籍不同,这本书是一本生命很长的书,也是值得反复阅读的。 这本书以当时看来十分先进的java语言作为载体,把经典的数据结构和算法梳理了一遍,对于初学者的帮助是很大。 另外书里每一章都给...
用户评价
坦白讲,《数据结构与算法》这本书,完全超出了我的预期,它的价值远不止于“一本技术书”。作为一名在大学期间就接触过相关课程,但毕业后工作内容相对单一的开发者,我一直想找一本能够系统梳理和深化我对数据结构与算法理解的书。这本书就是这样一本“宝藏”。作者的讲解方式极其现代化,他善于将枯燥的技术术语融入到生活化的场景中。比如,在讲解“图”的概念时,他会用社交网络中的“好友关系”来比喻节点和边,用“导航软件”的路径规划来阐述最短路径算法。这种联系现实的方式,极大地降低了学习的门槛,也让我在学习过程中充满了乐趣。书中对各种数据结构的剖析也相当深入,不仅仅是描述其结构,更重要的是讲解了每种数据结构的“适用场景”和“性能权衡”。比如,在介绍“散列表(哈希表)”时,作者详细分析了不同的哈希函数选择以及处理哈希冲突的各种策略(链地址法、开放地址法等),并深入探讨了它们对查找、插入和删除操作时间复杂度的影响。这让我不再是“知其然”,而是“知其所以然”。更令我惊喜的是,这本书在算法部分,并没有止步于理论的介绍,而是将大量的篇幅放在了“算法设计思路”和“优化技巧”上。例如,在讲解“贪心算法”时,作者通过“找零钱问题”、“活动选择问题”等经典案例,一步步引导读者理解贪心策略的适用条件和设计原则,而不是简单地罗列算法。这种“思维训练”的模式,让我感觉自己不再是被动地接受知识,而是主动地参与到解决问题的过程中。这本书的排版和设计也十分考究,大量的图表和代码示例清晰明了,阅读体验极佳,我甚至愿意花费更多的时间去品读其中的内容。
我必须说,《数据结构与算法》这本书,简直是我编程路上的“定海神针”。作为一名在软件行业摸爬滚打多年的老兵,我一直认为自己对数据结构和算法已经有了相当的掌握,但这本书的出现,让我不得不重新审视自己的知识体系。作者的写作风格非常具有辨识度,他不是那种平铺直叙的叙述者,而更像是一位经验丰富的“引路人”,总是能在我困惑的地方,巧妙地给我点拨一二。比如,在讲解“动态规划”这个令人闻风丧胆的领域时,作者并没有直接给出复杂的递归公式,而是从一个简单的“爬楼梯”问题入手,逐步引导读者理解“重叠子问题”和“最优子结构”这两个核心概念,然后才引入递推关系和状态转移方程。这种由浅入深、层层递进的讲解方式,让我这个之前对动态规划感到头疼不已的人,竟然开始慢慢领略到其中的精妙之处。书中对算法的分析也达到了一个全新的高度,作者不仅仅是停留在“为什么”这个层面,更是深入到“怎么做”和“怎么做得更好”的细节。例如,在讲解“字符串匹配算法”时,书中对比了朴素匹配、KMP算法和Boyer-Moore算法,不仅详细解释了它们的原理,还深入分析了它们在不同字符串模式下的性能表现,并给出了优化建议。这让我意识到,很多时候,我们看似“会用”的算法,其实还有很大的优化空间。这本书最让我赞赏的一点是,它非常注重培养读者的“算法思维”。作者反复强调,学习数据结构和算法,不仅仅是为了掌握某一个具体的算法,更重要的是培养一种抽象思维、逻辑分析和问题分解的能力。这本书中的每一个例子、每一个讲解,都在潜移默化地锻炼这种能力。我感觉自己在读完这本书后,解决问题的思路变得更加清晰,思考问题的方式也更加系统化了。
这本书真是让我大开眼界!作为一名自学的程序员,我一直觉得自己在某些方面总是“差一口气”,尤其是在解决复杂问题和优化代码效率的时候。拿到《数据结构与算法》这本书,我一开始还抱着试试看的心态,毕竟市面上相关的书籍多如牛毛,但翻开第一页,我就被深深吸引住了。作者的讲解方式非常独特,不是那种枯燥的理论堆砌,而是通过大量的实例和生动的比喻,将抽象的概念变得触手可及。比如,在讲到链表的时候,作者竟然用“一串珍珠项链”来类比,每一个珍珠(节点)都指向下一颗,这种形象的描述让我一下子就理解了链表的结构和操作。更令我惊喜的是,书中不仅讲解了基础的数据结构,比如数组、栈、队列,还深入探讨了树、图、哈希表等更高级的结构,而且每一种结构都配有清晰的伪代码和图示,让我能够直观地理解其内部机制。最关键的是,书中的算法部分,作者并没有止步于概念的解释,而是详细地剖析了各种经典算法的思路、复杂度分析以及实际应用场景。比如,在讲解排序算法时,作者不仅对比了冒泡排序、选择排序、插入排序等基础算法的优劣,还详细介绍了快速排序、归并排序等高效算法的实现原理,甚至还点出了它们在不同数据规模下的性能表现。这对于我来说,简直是福音!以前我只是模模糊糊知道有这些算法,但具体怎么用、有什么区别,一直没搞清楚。现在,通过这本书,我感觉自己像是打通了任督二脉,对如何选择合适的算法来解决实际编程问题有了全新的认识。这本书的内容深度和广度都超出了我的预期,绝对是我近期阅读过的最值得推荐的技术书籍之一。
我一直认为,数据结构和算法是编程的基石,但很多时候,我们往往会因为缺乏系统性的学习而感到力不从心。《数据结构与算法》这本书,正是这样一本能够填补我知识空白,并让我豁然开朗的读物。作者在叙述时,并没有使用那种高高在上的学术腔调,而是用一种非常平易近人,却又不失专业性的语言,娓娓道来。他非常擅长用“类比”的方式来解释抽象的概念,比如,在讲解“栈”的时候,他会比喻成“叠盘子”,只能从最上面拿取,而讲解“队列”时,则像“排队买票”,先来后到。这种生动的比喻,让我瞬间就能抓住核心要义,而且记忆深刻。书中对于各种数据结构的操作,也给出了详尽的步骤说明,并配有精美的插图,展示了操作前后的结构变化。这比单纯的文字描述要直观和易懂得多。例如,在介绍“平衡二叉树(AVL树)”时,作者详细讲解了旋转操作是如何恢复树的平衡的,并配有清晰的旋转示意图,让我能够清晰地看到节点是如何移动和调整的。此外,这本书在算法部分,也非常注重“实践性”。它不仅讲解了算法的原理,更提供了不同场景下的应用示例,并分析了算法在实际应用中的性能表现。比如,在讲解“图的遍历算法”时,作者对比了深度优先搜索(DFS)和广度优先搜索(BFS)在不同应用场景下的优劣,并给出了选择建议。这对于我这种更倾向于将知识转化为实际应用的人来说,非常有价值。这本书让我感觉,学习数据结构和算法不再是一件枯燥的任务,而是一次充满探索和发现的旅程。它不仅提升了我的技术能力,更重要的是,它教会了我如何以一种更严谨、更系统的方式去思考和解决问题。
说实话,我刚开始拿到《数据结构与算法》这本书时,并没有抱太大的期望,毕竟这类书名通常意味着晦涩难懂的数学公式和枯燥乏味的理论。然而,这本书完全颠覆了我的认知。作者在处理复杂概念时,展现出了极高的智慧和技巧。他没有直接抛出枯燥的定义,而是从实际问题的角度切入,比如,在介绍“二分查找”时,他会先描述一个需要在庞大电话簿中查找某个号码的场景,然后循序渐进地引出二分查找的逻辑,这种“以终为始”的讲解方式,让我立刻产生了学习的兴趣和动力。书中的图示尤其值得称赞,它们不是简单的示意图,而是经过精心设计,能够清晰地展示数据结构的内部变化过程,比如,在讲解“二叉搜索树”的插入和删除操作时,每一个步骤都伴随着直观的树形图变化,让我能够清晰地看到节点的移动和结构的调整。此外,作者对算法的分析也十分到位,他不仅提供了时间复杂度和空间复杂度的分析,还结合实际代码示例,讲解了如何通过分析算法的关键步骤来推导出其复杂度。例如,在讲解“图的深度优先遍历”时,作者会详细分析递归调用的次数以及栈的使用情况,从而得出其线性时间复杂度。更让我惊喜的是,书中还穿插了一些“实战技巧”和“陷阱提示”,提醒我们在实际编程中需要注意的细节,比如,在处理哈希表冲突时,作者给出了多种解决方案,并分析了各自的优缺点,这对于我这种实战经验不足的读者来说,简直是太有帮助了。总而言之,这本书在理论讲解和实际应用之间找到了一个绝佳的平衡点,让我学到了扎实的数据结构与算法知识,同时又能够灵活地运用到实际开发中。
略读,for考试
太深了,这本书,不适合初级入门看
写的一般吧,不知道是不是Java实现一些数据结构就是这个样子,与我学的c语言的差距怎么这么大呢。并且书里面讲的也不是特别的好,学习数据结构还是先学好c语言描述的那本书才好,这个啊,就当了解了
仍记当年解图时。。
8年架构之路的我收集了一些java架构资料,里面有高可用、高并发、高性能及分布式、Jvm性能调优、Spring源码, MyBatis,Netty,Redis,Kafka,Mysql,Zookeeper,Tomcat,Docker,Dubbo,Nginx等多个知识点的架构资料都是免费获取 的~加Q群809389099 免费获取!!!