《数据结构与抽象:Java语言描述》是一本数据结构的教材内容,Java語言与数据结构两根专业知识主线贯穿始终,这两根主线既独立同分布又互相支撑点。这书详细介绍了软件编程中应用的数据结构和优化算法,包含29章,各章涉及到一个ADT或其不一样完成的规格型号表明和用法;书里围绕9个Java主题曲,涉及到Java的高級特点。这书关键叙述了机构数据信息、设计类、包、栈、递归、排序、序列、双端队列、优先队列、线性表、有序表、搜索、词典、散列、树、二叉查找树、堆、均衡搜索树、图等內容,并对优化算法的高效率开展了剖析。
这书特别适合做为高校本科毕业数据结构课程内容的教材内容,也可做为电子计算机科学研究与开发者的教材。
目录:
- P.1 封装 3
- P.2 说明方法 5
- P.2.1 注释 5
- P.2.2 前置条件和后置条件 5
- P.2.3 断言 6
- P.3 Java接口 7
- P.3.1 写一个接口 8
- P.3.2 实现一个接口 9
- P.3.3 接口作为数据类型 11
- P.3.4 派生一个接口 12
- P.3.5 接口内命名常量 13
- P.4 选择类 14
- P.4.1 标识类 15
- P.4.2 CRC卡 15
- P.4.3 统一建模语言 16
- P.5 重用类 17
- 第1章 包 22
- 1.1 什么是包 22
- 1.2 说明一个包 23
- 1.3 使用ADT包 30
- 1.4 像使用自动贩卖机一样使用ADT 33
- 1.5 ADT集合 34
- 1.6 Java类库:接口Set 35
- Java插曲1 泛型 39
- 第2章 使用数组实现包 43
- 2.1 使用固定大小的数组实现ADT包 43
- 2.1.1 类比 43
- 2.1.2 一组核心方法 44
- 2.1.3 实现核心方法 45
- 2.1.4 让实现安全 51
- 2.1.5 测试核心方法 54
- 2.1.6 实现更多的方法 56
- 2.1.7 删除项的方法 58
- 2.2 使用可变大小的数组实现ADT包 65
- 2.2.1 可变大小数组 65
- 2.2.2 包的新实现 68
- 2.3 使用数组实现ADT包的优缺点 70
- Java插曲2 异常 75
- 第3章 使用链式数据实现包 82
- 3.1 链式数据 82
- 3.2 ADT包的链式实现 84
- 3.2.1 私有类Node 84
- 3.2.2 类LinkedBag的框架 85
- 3.2.3 定义一些核心方法 86
- 3.2.4 测试核心方法 89
- 3.2.5 方法getFrequencyOf 90
- 3.2.6 方法contains 91
- 3.3 从链中删除一项 92
- 3.4 有设置和获取方法的类Node 96
- 3.5 使用链实现ADT包的优缺点 98
- 第4章 算法的效率 102
- 4.1 动机 102
- 4.2 测量算法的效率 103
- 4.2.1 计数基本操作 105
- 4.2.2 最优、最差和平均情形 106
- 4.3 大O表示 107
- 4.4 描述效率 110
- 4.5 实现ADT包的效率 113
- 4.5.1 基于数组的实现 113
- 4.5.2 链式实现 114
- 4.5.3 两种实现的比较 115
- 第5章 栈 121
- 5.1 ADT栈的规格说明 121
- 5.2 使用栈来处理代数表达式 125
- 5.2.1 问题求解:检查中缀代数表达式中平衡的分隔符 125
- 5.2.2 问题求解:将中缀代数表达式转换为后缀表达式 129
- 5.2.3 问题求解:计算后缀表达式的值 133
- 5.2.4 问题求解:计算中缀表达式的值 134
- 5.3 程序栈 136
- 5.4 Java类库:类Stack 137
- 第6章 栈的实现 142
- 6.1 链式实现 142
- 6.2 基于数组的实现 144
- 6.3 基于向量的实现 148
- 6.3.1 Java类库:类Vector 148
- 6.3.2 使用向量实现ADT栈 149
- 第7章 递归 154
- 7.1 什么是递归 154
- 7.2 跟踪递归方法 158
- 7.3 返回一个值的递归方法 160
- 7.4 递归处理数组 162
- 7.5 递归处理链 165
- 7.6 递归方法的时间效率 166
- 7.6.1 countDown的时间效率 166
- 7.6.2 计算xn的时间效率 167
- 7.7 困难问题的简单求解方案 168
- 7.8 简单问题的低劣求解方案 172
- 7.9 尾递归 174
- 7.10 间接递归 176
- 7.11 使用栈来替代递归 177
- Java插曲3 再谈泛型 185
- 第8章 排序简介 194
- 8.1 对数组进行排序的Java方法的组织 194
- 8.2 选择排序 195
- 8.2.1 迭代选择排序 196
- 8.2.2 递归选择排序 198
- 8.2.3 选择排序的效率 198
- 8.3 插入排序 199
- 8.3.1 迭代插入排序 199
- 8.3.2 递归插入排序 201
- 8.3.3 插入排序的效率 202
- 8.3.4 链式结点链的插入排序 203
- 8.4 希尔排序 205
- 8.4.1 算法 206
- 8.4.2 希尔排序的效率 207
- 8.5 算法比较 208
- 第9章 更快的排序方法 213
- 9.1 归并排序 213
- 9.1.1 归并数组 213
- 9.1.2 递归归并排序 214
- 9.1.3 归并排序的效率 216
- 9.1.4 迭代归并排序 217
- 9.1.5 Java类库中的归并排序 218
- 9.2 快速排序 218
- 9.2.1 快速排序的效率 219
- 9.2.2 创建划分 219
- 9.2.3 实现快速排序 221
- 9.2.4 Java类库中的快速排序 223
- 9.3 基数排序 223
- 9.3.1 基数排序的伪代码 225
- 9.3.2 基数排序的效率 225
- 9.4 算法比较 226
- Java插曲4 再谈异常 231
- 第10章 队列、双端队列和优先队列 238
- 10.1 ADT队列 238
- 10.1.1 问题求解:模拟排队 241
- 10.1.2 问题求解:计算出售股票的资本收益 246
- 10.1.3 Java类库:接口Queue 248
- 10.2 ADT双端队列 249
- 10.2.1 问题求解:计算出售股票的资本收益 251
- 10.2.2 Java类库:接口Deque 252
- 10.2.3 Java类库:类ArrayDeque 253
- 10.3 ADT优先队列 254
- 10.3.1 问题求解:跟踪任务分配 255
- 10.3.2 Java类库:类PriorityQueue 257
- 第11章 队列、双端队列和优先队列的实现 262
- 11.1 队列的链式实现 262
- 11.2 基于数组实现队列 265
- 11.2.1 循环数组 266
- 11.2.2 带一个不用位置的循环数组 267
- 11.3 队列的循环链式实现 272
- 11.4 Java类库:类AbstractQueue 277
- 11.5 双端队列的双向链式实现 2