标题：Java软件结构与数据结构
图书信息
  书 名: Java软件结构与数据结构
作　者：（美）刘易斯，（美）切斯　
出版社： 清华大学出版社
出版时间： 2009-9-1
ISBN: 9787302207306
开本： 16开
定价: 59.00元
内容简介
本书是著名作者John Lewis与William Loftus作为其一流的CS1教材“Java Software Solutions：Foundations of Program Design”的姊妹篇。尽管本书的英文名为“Java Software Structures: Designing and Using Data Structures”，但正如作者在前言中所说的那样，本书其实是一本可作为“数据结构与算法”课程的教材。根据使用了前两版的教师和学生的反馈，作者在第3版中进行了重大修改，以适应教学的需要。
《Java软件结构与数据结构(第3版)》的写作方法是建立在一些我们强烈推荐的重要原则之上的。首先，我们以一种连贯叙述的方式介绍在《Java软件结构与数据结构(第3版)》中将要考察的各种集合。其次，我们强调完美软件设计技巧的重要性。第三，我们对《Java软件结构与数据结构(第3版)》结构加以组织以支持和强化《Java软件结构与数据结构(第3版)》的重要目标：即数据结构与算法的学习。我们将更深入地考察这些原则。 　
本书关注的是数据结构和算法背后的核心设计问题。在展现每种集合时，本书都是先探讨该集合的一般概念，接着再讨论该集合在问题求解中的用法，最后讨论了各种候选实现方案。因此，本书是“数据结构与算法”Java语言描述课程的理想教材。 
图书目录
第1章 概述 11.1 软件质量 11.1.1 正确性 21.1.2 可靠性 21.1.3 健壮性 31.1.4 可用性 31.1.5 可维护性 31.1.6 可重用性 41.1.7 可移植性 41.1.8 运行效率 41.1.9 质量问题 51.2 数据结构 51.2.1 一个物理示例 51.2.2 以集装箱作为对象 7关键概念小结 7自测题 8练习题 8自测题答案 8第2章 算法分析 92.1 算法效率分析 92.2 增长函数与大O记法 102.3 增长函数的比较 122.4 时间复杂度分析 132.4.1 循环运行的复杂度分析 132.4.2 嵌套循环的复杂度分析 142.4.3 方法调用的复杂度分析 15关键概念小结 16自测题 16练习题 17自测题答案 17参考文献 18第3章 集合 193.1 概述 193.1.1 抽象数据类型 203.1.2 Java集合API 213.2 栈集合 223.3 主要的面向对象概念 233.3.1 继承 243.3.2 类层次 253.3.3 Object类 263.3.4 多态性 273.3.5 引用与类层次 283.3.6 泛型 293.4 栈ADT 30接口 303.5 使用栈计算后缀表达式 323.6 异常 383.6.1 异常消息 393.6.2 try语句 393.6.3 异常传播 403.7 用数组实现栈 41管理容量 413.8 ArrayStack类 423.8.1 构造函数 433.8.2 push操作 443.8.3 pop操作 453.8.4 peek操作 463.8.5 其他操作 46关键概念小结 46自测题 47练习题 48程序设计项目 48自测题答案 49第4章 链式结构 514.1 链接作为引用 514.2 管理链表 534.2.1 访问元素 534.2.2 插入结点 544.2.3 删除结点 554.2.4 哑结点 554.3 无链接的元素 56双向链表 564.4 用链表实现栈 574.4.1 LinkedStack类 574.4.2 push操作 604.4.3 pop操作 614.4.4 其他操作 624.5 使用栈来穿越迷宫 624.6 java.util.Stack类实现栈 674.6.1 独有的操作 684.6.2 继承与实现 68关键概念小结 69自测题 69练习题 69程序设计项目 70自测题答案 70第5章 队列 725.1 概述 725.2 使用队列：代码密钥 755.3 使用队列：售票口模拟 775.4 用链表实现队列 815.4.1 enqueue操作 835.4.2 dequeue操作 845.4.3 其他操作 855.5 用数组实现队列 855.5.1 enqueue操作 885.5.2 dequeue操作 905.5.3 其他操作 90关键概念小结 90自测题 91练习题 91程序设计项目 92自测题答案 92第6章 列表 946.1 概述 946.1.1 迭代器 966.1.2 往列表添加元素 976.1.3 接口与多态性 986.2 有序列表使用示例：联赛主办者 1046.3 索引列表使用示例：Josephus问题 1096.4 使用数组实现列表 1116.4.1 remove操作 1126.4.2 contains操作 1146.4.3 iterator操作 1156.4.4 有序列表的add操作 1176.4.5 无序列表的特有操作 1186.4.6 无序列表的addAfter操作 1186.5 使用链表实现列表 1196.5.1 remove操作 1196.5.2 双向链表 1216.5.3 iterator操作 1246.6 Java集合API中的列表 1266.6.1 Cloneable接口 1266.6.2 Serializable接口 1276.6.3 RandomAccess接口 1276.6.4 java.util.Vector接口 1276.6.5 java.util.ArrayList接口 1296.6.6 java.util.LinkedList接口 130关键概念小结 132自测题 133练习题 133程序设计项目 134自测题答案 134第7章 递归 1367.1 递归地思考 1367.1.1 无穷递归 1377.1.2 数学中的递归 1387.2 递归地编程 1387.2.1 递归与迭代 1407.2.2 直接递归与间接递归 1407.3 使用递归 1417.3.1 穿越迷宫 1417.3.2 汉诺塔 1457.4 递归算法分析 149关键概念小结 150自测题 151练习题 151程序设计项目 152自测题答案 153第8章 排序与查找 1548.1 查找 1548.1.1 静态方法 1558.1.2 泛型方法 1558.1.3 线性查找法 1568.1.4 二分查找法 1578.1.5 查找算法的比较 1598.2 排序 1608.2.1 选择排序法 1628.2.2 插入排序法 1648.2.3 冒泡排序法 1658.2.4 快速排序法 1678.2.5 归并排序法 1708.3 基数排序法 171关键概念小结 175自测题 176练习题 176程序设计项目 177自测题答案 177第9章 树 1789.1 概述 178树的分类 1799.2 实现树的策略 1809.2.1 树的数组实现之计算策略 1809.2.2 树的数组实现之模拟链接策略 1819.2.3 树的分析 1829.3 树的遍历 1829.3.1 前序遍历 1839.3.2 中序遍历 1839.3.3 后序遍历 1849.3.4 层序遍历 1849.4 二叉树 1859.5 使用二叉树：表达式树 1889.6 用链表实现二叉树 1979.6.1 find方法 1999.6.2 iteratorInOrder方法 2019.7 用数组实现二叉树 2029.7.1 find方法 2039.7.2 iteratorInOrder方法 204关键概念小结 205自测题 205练习题 206程序设计项目 206自测题答案 206第10章 二叉查找树 20810.1 概述 20810.2 用链表实现二叉查找树 21110.2.1 addElement操作 21110.2.2 removeElement操作 21310.2.3 removeAllOccurrences操作 21610.2.4 removeMin操作 21710.3 用数组实现二叉查找树 21810.3.1 addElement操作 21910.3.2 removeElement操作 22110.3.3 replace操作 22310.3.4 removeAllOccurrences操作 22710.3.5 removeMin操作 22710.4 用有序列表实现二叉查找树 228BinarySearchTreeList实现的分析 23110.5 平衡二叉查找树 23210.5.1 右旋 23310.5.2 左旋 23310.5.3 右左旋 23410.5.4 左右旋 23410.6 实现二叉查找树：AVL树 23510.6.1 AVL树的右旋 23510.6.2 AVL树的左旋 23610.6.3 AVL树的右左旋 23610.6.4 AVL树的左右旋 23610.7 实现二叉查找树：红黑树 23710.7.1 红黑树中的元素插入 23710.7.2 红黑树中的元素删除 23910.8 实现二叉查找树：Java集合API 241关键概念小结 243自测题 244练习题 245程序设计项目 245自测题答案 246参考文献 247第11章 优先队列与堆 24811.1 堆 24811.1.1 addElement操作 25011.1.2 removeMin操作 25111.1.3 findMin操作 25211.2 使用堆：优先级队列 25211.3 用链表实现堆 25611.3.1 addElement操作 25711.3.2 removeMin操作 25911.3.3 findMin操作 26111.4 用数组实现堆 26111.4.1 addElement操作 26211.4.2 removeMin操作 26311.4.3 findMin操作 26511.5 使用堆：堆排序 265关键概念小结 266自测题 267练习题 267程序设计项目 268自测题答案 268第12章 多路查找树 27012.1 整合树的概念 27012.2 2-3树 27012.2.1 往2-3树中插入元素 27112.2.2 从2-3树中删除元素 27312.3 2-4树 27512.4 B树 27612.4.1 B*树 27712.4.2 B+树 27712.4.3 B树的分析 27812.5 B树的实现策略 278关键概念小结 279自测题 279练习题 279程序设计项目 280自测题答案 280参考文献 281第13章 图 28213.1 无向图 28213.2 有向图 28413.3 网络 28513.4 常用的图算法 28613.4.1 遍历 28613.4.2 测试连通性 28913.4.3 最小生成树 29013.4.4 判定最短路径 29313.5 图的实现策略 29313.5.1 邻接列表 29313.5.2 邻接矩阵 29413.6 用邻接矩阵实现无向图 29513.6.1 addEdge方法 29813.6.2 addVertex方法 29913.6.3 expandCapacity方法 30013.6.4 其他方法 300关键概念小结 300自测题 301练习题 301程序设计项目 302自测题答案 302参考文献 303第14章 散列 30414.1 概述 30414.2 散列函数 30514.2.1 余数法 30614.2.2 折叠法 30614.2.3 平方取中法 30714.2.4 基数转换法 30714.2.5 数字分析法 30714.2.6 长度相关法 30714.2.7 Java语言中的散列函数 30814.3 解决冲突 30814.3.1 链地址法 30814.3.2 开放地址法 31014.4 从散列表删除元素 31214.4.1 从链地址实现中删除 31214.4.2 从开放地址实现中删除 31214.5 Java集合API中的散列表 31314.5.1 Hashtable类 31314.5.2 HashSet类 31414.5.3 HashMap类 31514.5.4 IdentityHashMap类 31614.5.5 WeakHashMap类 31714.5.6 LinkedHashSet与LinkedHashMap 318关键概念小结 319自测题 319练习题 320程序设计项目 320自测题答案 321第15章 Set与Map集合 32315.1 Set集合 32315.2 使用Set：bingo程序 32615.3 用数组实现Set 32915.3.1 add操作 33015.3.2 addAll操作 33215.3.3 removeRandom操作 33215.3.4 remove操作 33315.3.5 union操作 33415.3.6 contains操作 33515.3.7 equals操作 33615.3.8 其他操作 33715.3.9 UML描述 33715.4 用链表实现Set 33815.4.1 add操作 33815.4.2 removeRandom操作 33915.4.3 remove操作 34015.4.4 其他操作 34115.5 Map集合与Java集合API 341关键概念小结 342自测题 343练习题 343程序设计项目 343自测题答案 344附录A UML 346A.1 统一建模语言 346A.2 UML类图 346A.3 UML关系 347关键概念小结 349自测题 350练习题 350自测题答案 350附录B 面向对象设计 351B.1 概述 351B.2 使用对象 351B.2.1 抽象 352B.2.2 创建对象 353B.3 类库与包 354import声明 355B.4 状态与行为 355B.5 类 356实例数据 359B.6 封装 359B.6.1 可见性修饰符 360B.6.2 局部数据 361B.7 构造函数 361B.8 方法重载 362B.9 再谈引用 363B.9.1 空引用 363B.9.2 this引用 364B.9.3 别名 365B.9.4 垃圾回收 367B.9.5 将对象作为参数传递 367B.10 static修饰符 368B.10.1 静态变量 368B.10.2 静态方法 369B.11 包装类 369B.12 接口 370B.12.1 Comparable接口 371B.12.2 Iterator接口 372B.13 继承 372B.13.1 派生类 373B.13.2 protected修饰符 375B.13.3 super引用 375B.13.4 重载方法 376B.14 类的层次结构 376B.14.1 Object类 377B.14.2 抽象类 378B.14.3 接口的层次结构 379B.15 多态性 379B.15.1 引用和类的层次结构 380B.15.2 基于继承的多态性 381B.15.3 基于接口的多态性 382B.16 泛型 384B.17 异常 385B.17.1 异常消息 385B.17.2 try语句 386B.17.3 异常传播 387B.17.4 异常类的层次结构 387关键概念小结 388自测题 390练习题 390程序设计项目 391自测题答案 392