导语
内容提要
本书的主要目标是介绍传统和现代的数据结构,重点在于问题的解决和软件的设计。本书使用Java编程语言作为解决问题的工具,为读者增加对现代编程语言和面向对象编程范式的熟悉程度提供了一个机会,随着数据结构覆盖面的扩大,引入并使用支持主要目标的恰当Java构造,从最初开始并贯穿全书,介绍并扩展了许多Java功能的应用,如类、对象、泛型、多态、包、接口、库中的类、继承和线程,还在整个过程中使用统一建模语言(UML)类图来帮助建模并可视化对象、类、接口、应用程序及其相互关系。
目录
Chapter 1 知识整理
1.1 类、对象和应用程序
类
统一方法
对象
应用程序
1.2 组织类
继承
包
1.3 异常
处理异常状况
异常与类:实例
1.4 数据结构
非独立实现的结构
独立实现结构
数据结构的含义?
1.5 基本结构化机制
内存
引用
数组
1.6 算法比较:增长阶分析
测算法的时间效率
情况复杂度
输入值的大小
算法比较
增长顺序
选择排序算法
常见的增长阶
小结
习题
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 二叉搜索树接口
接口
7.4 实现层级:基础级
7.5 迭代法VS递归法的实现
size函数的递归法
size函数的迭代法
递归还是迭代
7.6 实现层级:剩余的观察函数
contains和get函数
遍历
7.7 实现层级:转换函数
add操作
remove操作
7.8 二叉搜索树的功能
重新讨论文本分析实验
插入顺序和树形
平衡二叉搜索树
7.9 应用程序:词频计数器
类WordFreq
应用程序
7.10 树的变体
特定应用的变体
平衡搜索树
小结
习题
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 抽象数据类型—图
Chapter 11 排序和查找算法