数据抽象和问题求解 Java语言描述
作者:(美)Frank M.Carrano,(美)Janet J.Prichard著 韩志宏译
出版时间: 2005年版
内容简介
本书全面系统地讲述了如何利用Java语言来解决实际问题,重点剖析了数据结构和数据抽象的核心概念,并通过大量实例向读者展示了面向对象程序设计理念的精髓。本书表述严谨、推理缜密,适合作为计算机及相关专业本科阶段的教材,也是一本技术含量很高的专业参考书。本书特色◆提供丰富的实例,演示各种抽象数据类型的应用方法。◆详细剖析重要概念的程序代码,帮助读者快速掌握核心技术。◆精心没置“自我测试”、“练习题”、“编程问题”等环节,以利于课堂教学。◆知识点全面,语言通俗易懂,可同时满足初、中级读者的学习需求。
目录
第I部分 问题求解技术
第1章 编程原理与软件工程
1. 1 问题求解与软件工程
1. 1. 1 问题求解的含义
1. 1. 2 软件的生命周期
1. 1. 3 优秀解决方案的定义
1. 2 模块化设计
1. 2. 1 抽象与信息隐藏
1. 2. 2 面向对象的设计
1. 2. 3 自上而下的设计
1. 2. 4 一般设计原则
1. 3 关键编程问题
1. 3. 1 模块化
1. 3. 2 可修改
1. 3. 3 易用
1. 3. 4 防故障编程
1. 3. 5 风格
1. 3. 6 调试
1. 4 小结
1. 5 提示
1. 6 自我测试题
1. 7 练习题
1. 8 编程问题
第2章 递归:镜子
2. 1 递归解决方案
2. 1. 1 递归值方法:n的阶乘
2. 1. 2 递归void方法:逆置字符串
2. 2 计数
2. 2. 1 兔子繁殖
2. 2. 2 组织游行队伍
2. 2. 3 Spock的困惑
2.3 数组查找
2. 3. 1 查找数组最大项
2. 3. 2 折半查找
2. 3. 3 查找数组中第k个最小项
2. 4 组织数据
2. 5 递归与效率
2. 6 小结
2. 7 提示
2. 8 自我测试题
2. 9 练习题
2. 10 编程问题
第3章 数据抽象:墙
3. 1 抽象数据类型
3. 2 指定ADT
3. 2. 1 ADT列表
3. 2. 2 ADT有序表
3. 2. 3 设计ADT
3. 2. 4 公理
3. 3 实现ADT
3. 3. 1 Java类
3. 3. 2 Java接口
3. 3. 3 Java异常
3. 3. 4 基于数组的ADT列表实现
3. 4 小结
3. 5 提示
3. 6 自我测试题
3. 7 练习题
3. 8 编程问题
第4章 链表
4. 1 预备知识
4. 1. 1 对象引用
4. 1. 2 变长数组
4. 1. 3 基于引用的链表
4. 2 链表编程
4. 2. 1 显示链表内容
4. 2. 2 从链表中删除指定节点
4. 2. 3 在链表特殊位置插入节点
4. 2. 4 ADT列表的基于引用的实现
4. 2. 5 比较基于数组的实现和基于引用的实现
4. 2. 6 将链表传给方法
4. 2. 7 递归地处理链表
4. 3 链表的各种变化
4. 3. 1 尾引用
4. 3. 2 循环链表
4. 3. 3 虚拟头节点
4. 3. 4 双向链表
4. 4 清单应用程序
4. 5 小结
4. 6 提示
4. 7 自我测试题
4. 8 练习题
4. 9 编程问题
第5章 递归问题求解技术
5. 1 回溯
5. 2 定义语言
5. 2. 1 语法知识基础
5. 2. 2 两种简单语言
5. 2. 3 代数表达式
5. 3 递归和数学归纳法的关系
5. 3. 1 factorial递归算法的正确性
5. 3. 2 Hanoi塔的成本
5. 4 小结
5. 5 提示
5. 6 自我测试题
5. 7 练习题
5. 8 编程问题
第II部分 使用抽象数据类型解决问题
第6章 栈
6. 1 抽象数据类型
6. 2 ADT栈的简单应用
6. 2. 1 检查括号匹配
6. 2. 2 识别语言中的字符串
6. 3 ADT栈的实现
6. 3. 1 ADT栈的基本数组的实现
6. 3. 2 ADT栈的基于引用的实现
6. 3. 3 使用ADT列表的实现
6. 3. 4 各种实现方式的比较
6. 4 应用:代数表达式
6. 4. 1 计算后缀表达式
6. 4. 2 中缀表达式与后缀表达式的等价转换
6. 5 应用:查找问题
6. 5. 1 使用栈的非递归解决方案
6. 5. 2 递归解决方案
6. 6 栈和递归的关系
6. 7 小结
6. 8 提示
6. 9 自我测试题
6. 10 练习题
6. 11 编程问题
第7章 队列
7. 1 ADT队列
7. 2 ADT队列的简单应用
7. 2. 1 读取字符串
7. 2. 2 识别回文
7. 3 实现ADT队列
7. 3. 1 基于引用的实现
7. 3. 2 基于数组的实现
7. 3. 3 用ADT列表的实现
7. 3. 4 实现比较
7. 4 基于位置的ADT总览
7. 5 模拟应用
7. 6 小结
7. 7 提示
7. 8 自我测试题
7. 9 练习题
7. 10 编程问题
第8章 类关系
8. 1 继承
8. 1. 1 Java包
8. 1. 2 Java访问修饰符
8. 1. 3 is-a和has-a关系
8. 2 动态绑定和抽象类
8. 2. 1 抽象类
8. 2. 2 Java接口
8. 3 ADT列表和有序表
8.3.1 列表迭代器的实现
8. 3. 2 使用ADT列表的ADT有序表的实现
8. 4 面向对象方法的优势
8. 5 小结
8. 6 提示
8. 7 自我测试题
8. 8 练习题
8. 9 编程问题
第9章 算法效率和排序
9. 1 确定算法效率
9. 1. 1 算法的执行时间
9. 1. 2 算法增率
9. 1. 3 数量阶分析和大O表示法
9. 1. 4 正确分析问题
9. 1. 5 查找算法的效率
9. 2 排序算法及其效率
9. 2. 1 选择排序
9. 2. 2 起泡排序
9. 2. 3 插入排序
9. 2. 4 归并排序
9. 2. 5 快速排序
9. 2. 6 基数排序
9. 2. 7 各种排序算法的比较
9. 3 小结
9. 4 提示
9. 5 自我测试题
9. 6 练习题
9. 7 编程问题
第10章 树
10. 1 术语
10. 2 ADT二叉树
10. 2. 1 ADT二叉树的基本操作
10. 2. 2 ADT二叉树的一般操作
10. 2. 3 二叉树的遍历
10. 2. 4 二叉树的表示
10. 2. 5 ADT二叉树的基于引用的实现
10. 2. 6 用迭代器遍历树
10. 3 ADT二叉查找树
10. 3. 1 ADT二叉查找树的操作算法
10. 3. 2 ADT二叉查找树的基于引用的实现
10. 3. 3 二叉查找树操作的效率
10. 3. 4 树排序
10. 3. 5 将二叉查找树保存到文件
10. 4 一般树
10. 5 小结
10. 6 提示
10. 7 自我测试题
10. 8 练习题
10. 9 编程问题
第11章 表和优先队列
11. 1 ADT表
11. 1. 1 选择实现
11. 1. 2 ADT表的基于数组的有序实现
11. 1. 3 ADT表的二叉查找树实现
11. 2 ADT优先队列:ADT表的变体
11. 2. 1 堆
11. 2. 2 ADT优先队列的堆实现
11. 2. 3 堆排序
11. 3 小结
11. 4 提示
11. 5 自我测试题
11. 6 练习题
11. 7 编程问题
第12章 表的高级实现
12. 1 平衡查找树
12. 1. 1 2-3树
12. 1. 2 2-3-4树
12. 1. 3 红-黑树
12. 1. 4 AVL树
12. 2 散列
12. 2. 1 散列函数
12. 2. 2 解决冲突
12. 2. 3 散列效率
12. 2. 4 如何确立散列函数
12. 2. 5 表遍历:散列的低效操作
12. 3 按多种形式组织数据
12. 4 小结
12. 5 提示
12. 6 自我测试题
12. 7 练习题
12. 8 编程问题
第13章 图
13. 1 术语
13. 2 将图作为ADT
13. 3 图的遍历
13. 3. 1 深度优先查找
13. 3. 2 广度优先查找
13. 4 图的应用
13. 4. 1 拓扑排序
13. 4. 2 生成树
13. 4. 3 最小生成树
13. 4. 4 最短路径
13. 4. 5 回路
13. 4. 6 一些复杂问题
13. 5 小结
13. 6 提示
13. 7 自我测试题
13. 8 练习题
13. 9 编程问题
第14章 外部方法
14. 1 了解外部存储
14. 2 排序外部文件的数据
14. 3 外部表
14. 3. 1 确定外部文件的索引
14. 3. 2 外部散列
14. 3. 3 B-树
14. 3. 4 遍历
14. 3. 5 多索引
14. 4 小结
14. 5 提示
14. 6 自我测试题
14. 7 练习题
14. 8 编程练习
附录A Java基本原理
A. 1 程序结构
A. 1. 1 包
A. 1. 2 类
A. 1. 3 数据字段
A. 1. 4 方法
A. 1. 5 对象成员的访问方法
A. 2 Java语言基础知识
A. 2. 1 注释
A. 2. 2 标识符和关键词
A. 2.3 变量
A. 2. 4 基本数据类型
A. 2. 5 引用
A. 2. 6 字面常量
A. 2. 7 命名常量
A. 2. 8 赋值和表达式
A. 2. 9 数组
A. 3 有用的Java类
A. 3. 1 Object类
A. 3. 2 字符串类
A. 4 Java异常
A. 4. 1 捕获异常
A. 4. 2 抛出异常
A. 5 文本输入和输出
A. 5. 1 输入
A. 5. 2 输出
A. 6 选择语句
A. 6. 1 if语句
A. 6. 2 switch语句
A. 7 迭代语句
A. 7. 1 while语句
A. 7. 2 for语句
A. 7. 3 do语句
A. 8 文件输入和输出
A. 8. 1 文本文件
A. 8. 2 对象串行化
A. 9 比较Java和C++
A. 10 小结
A. 11 提示
附录B 统一字符代码
附录C Java资源
C. 1 Java Web站点
C. 2 使用Java 2软件开发包
附录D 数字归纳法
D.1 公理1
D.2 公理2
D.3 自我测试题
D.4 练习题
附录E Java操作符