JAVA面向对象数据结构完全学习教程 典藏中文版
作者: (美国)内尔 黛尔,丹尼尔 T.乔伊斯,奇普 威姆斯
出版时间:2019年版
内容简介
本书主要介绍传统的和现代的数据结构方面的知识,重点介绍问题的解决和软件的设计。从基础知识开始并贯穿全书,介绍并扩展了许多Java功能的应用,如类、对象、泛型、多态、包、接口、库中的类、继承、异常和线程等。我们还在整个讲解过程中使用统一建模语言(UML)类图来帮助建模并可视化对象、类、接口、应用程序及其相互关系。 Chapter 1 关于基础知识的整理。综述面向对象,强调了组织对象和类的机制。 Chapter 2 介绍了抽象数据类型栈(Stack),引入了抽象数据类型(abstract data type,ADT)的概念。 Chapter 3 讨论了递归(Recursion),演示了如何使用递归解决编程问题。 Chapter 4 介绍了抽象数据类型队列(Queue)。 Chapter 5 对抽象数据类型集合进行了定义。 Chapter 6 介绍了一个更具体的抽象数据类型—集合。 Chapter 7 介绍了二叉搜索树抽象数据类型。 Chapter 8 讲了映射(Map)抽象数据类型,映射抽象数据类型也叫符号表、字典或关联数组。 Chapter 9 介绍了优先级队列抽象数据类型,它与队列密切相关,但具有不同的访问协议。 Chapter 10 讲了图(Graph)抽象数据类型,包括实现方法和数种有关图的重要算法(深度优先搜索、广度优先搜索、路径存在与否、Z短路径和连通分量)。 Chapter 11 介绍/回顾了一些排序和查找算法。
目录
Chapter 1? 知识整理
1.1? 类、对象和应用程序?
类?
统一方法?
对象?
应用程序?
1.2? 组织类?
继承?
包?
1.3? 异常?
处理异常状况?
异常与类:实例?
1.4? 数据结构?
非独立实现的结构?
独立实现结构?
数据结构的含义??
1.5? 基本结构化机制?
内存?
引用?
数组?
1.6? 算法比较:增长阶分析?
测算法的时间效率?
情况复杂度?
输入值的大小?
算法比较? 66
增长顺序? 68
选择排序算法? 69
常见的增长阶? 72
? 小结? 73
? 习题? 74
Chapter 2? 抽象数据类型—栈?
2.1? 抽象?
信息隐藏?
数据抽象?
数据层次?
前置条件和后置条件?
Java接口?
基于接口的多态性?
2.2? 栈?
栈的操作?
栈的用法?
2.3? 集合元素?
常用集合?
2.4? 栈接口?
异常情况?
接口?
应用实例?
2.5? 基于数组的栈实现?
ArrayBoundedstack类?
栈操作的定义?
ArrayListStack类?
2.6? 应用程序:平衡表达式?
平衡类?
应用程序?
软件架构?
2.7? 链表?
数组与链表?
LLNode类?
链表操作?
2.8? 基于链接的栈?
LinkedStack类?
压栈操作?
弹栈操作?
其他栈操作?
比较栈的实现方式?
2.9? 应用程序:后缀表达式评估器
讨论?
后缀表达式求值?
后缀表达式求值算法?
错误处理?
PostFixEvaluator类?
PFixCLI类?
2.10? 栈变体?
重新审视栈抽象数据类型?
Java栈类和集合框架?
? 小结?
? 习题?
Chapter 3? 递归?
3.1? 递归定义、算法和程序?
递归定义
递归计算?
递归程序?
阶乘的迭代解决方案?
3.2? 三个问题?
验证递归算法?
确定输入限制?
编写递归方法?
调试递归方法?
3.3? 数组的递归处理?
二分查找?
3.4? 链表的递归处理?
链表的递归性质
链表遍历?
链表转换?
3.5? 塔?
算法?
方法?
程序?
3.6? 分形?
丁字方形的分形?
变体?
3.7? 移除递归?
递归的工作原理?
尾调用消除?
直接使用栈?
3.8? 何时使用递归解决方案?
递归开销?
低效算法?
清晰度?
? 小结?
? 习题?
Chapter 4? 抽象数据类型—队列?
4.1? 队列?
队列操作?
使用队列?
4.2? 队列接口?
应用实例?
4.3? 基于数组的队列实现?
ArrayBoundedQueue类?
ArrayUnboundedQueue类?
4.4? 交互式测试驱动程序?
一般方法?
ArrayBoundedQueue类的测试驱动?
使用测试驱动程序?
4.5? 基于链接的队列实现?
入队操作?
出队操作
循环链表队列设计?
比较队列实现?
4.6? 应用程序:回文?
回文类?
应用程序?
4.7? 队列变体
特殊情况?
玻璃队列?
双端队列?
双向链表?
Java库集合框架队列/双端队列?
4.8? 应用程序:平均等待时间?
问题讨论和示例?
Customer类?
模拟?
测试?
4.9? 并发、干扰和同步?
Counter类?
Java线程?
干扰?
同步?
同步队列?
并发与Java库集合类?
? 小结?
? 习题?
Chapter 5? 抽象数据类型—集合?
5.1? 集合接口?
集合的前提?
接口?
5.2? 实现基于数组的集合?
5.3? 应用程序:词汇密度?
5.4? 重新探讨比较对象?
函数equals?
Comparable接口?
5.5? 基于排序数组的集合的实现?
参比元素?
实现?
以“拷贝”或“引用”的方式实现抽象数据类型?
示例程序?
5.6? 基于链接的集合的实现?
内部表示形式
运算?
比较集合实现?
5.7? 集合变体
Java集合框架?
Bag?ADT?
Set?ADT?
? 小结?
? 习题?
Chapter 6? 抽象数据类型—列表?
6.1? 列表接口?
迭代?
列表假设?
接口
6.2? 列表实现?
基于数组的实现?
基于链表的实现?
6.3? 应用程序:纸牌和游戏?
Card类?
CardDeck类?
应用程序:排列Card?Hand?
应用程序:Higher?or?Lower?
应用程序:一对牌有多罕见?
6.4? 基于数组的有序列表的实现?
插入排序?
不支持的操作?
Comparator接口?
构造函数?
应用实例?
6.5? 列表变体?
Java库列表?
链表变体?
链表作为节点数组?
6.6? 应用程序:大整数
大整数?
内部表示?
LargeIntList类
LargeInt类
加法和减法
LargeIntCLI程序?
? 小结?
? 习题?
Chapter 7? 抽象数据类型—二叉搜索树?
7.1? 树?
树的遍历?
7.2? 二叉搜索树?
二叉树?
二叉搜索树?
二叉树遍历?
7.3? 二叉搜索树接口?
接口? 449
7.4? 实现层级:基础级?
7.5? 迭代法VS递归法的实现?
size函数的递归法?
size函数的迭代法?
递归还是迭代
7.6? 实现层级:剩余的观察函数?
contains和get函数?
遍历?
7.7? 实现层级:转换函数?
add操作?
remove操作?
7.8? 二叉搜索树的功能?
重新讨论文本分析实验?
插入顺序和树形?
平衡二叉搜索树?
7.9? 应用程序:词频计数器
类WordFreq?
应用程序?
7.10? 树的变体?
特定应用的变体? 4
平衡搜索树?
? 小结?
? 习题?
Chapter 8? 抽象数据类型—Map?
8.1? Map接口?
8.2? Map的实现?
无序数组?
有序数组?
无序链表?
有序链表?
二叉搜索树?
以基于ArrayList的方式实现?
8.3? 应用程序:从字符串到字符串的Map?
8.4? 哈希法?
冲突
8.5? 哈希函数?
数组大小?
哈希函数?
Java对哈希的支持?
复杂度?
8.6? 基于哈希的Map?
实现?
使用HMap类?
8.7? Map的变体?
混合结构?
Java对Map的支持?
? 小结?
? 习题?
Chapter 9? 抽象数据类型—优先级队列?
9.1? 优先级队列接口?
使用优先级队列?
接口?
9.2? 优先级队列的实现?
无序数组?
有序数组?
有序链表?
二叉搜索树?
9.3? 堆?
9.4? 堆的实现?
二叉树的非链接表示?
实现堆?
Enqueue(入队)方法?
Dequeue(出队)方法?
应用实例?
堆VS优先级队列的其他表示?
? 小结?
? 习题?
Chapter 10? 抽象数据类型—图?
10.1? 图的介绍?
10.2? 图的接口?
10.3? 图的实现?
基于数组的实现?
链接实现
10.4? 应用程序:图的遍历?
深度优先搜索?
广度优先搜索?
10.5? 应用程序:单源最短路径问题?
? 小结?
? 习题
Chapter 11? 排序和查找算法?
11.1? 排序?
测试工具?
11.2? 简单排序?
选择排序?
冒泡排序?
插入排序
11.3? O(Nlog2N?)排序
合并排序
快速排序?
堆排序?
11.4? 更多的排序思考?
测试?
效率?
对象和引用?
比较对象?
稳定性
11.5? 查找?
顺序查找?
高概率排序?
有序集合?
哈希法?
? 小结?
? 习题?
? ?
附录A?
? 附录B?
? 附录C?
? 附录D?
? 术语表?
? 索引