Thomas A.Standish以一种全新的视解介绍了数据结构和算法基础。Standish相信Java提供了一种机会来重新审视学科的内容,这种新的开发语言带来了新的挑战。例如,尽管Java语言没有显式的指针,但本书仍然是提供了指针算法,有助于学生们形象化地理解这种主要的数据结构。Standish清晰的表述帮助读者将各种数据结构联系在一起。诸如模块化、抽象级别、效率和权衡等核心思想在本书都集成在一起,目的是合并许多实质性的概念并提示其底层的统一和联系。
第1章准备旅行
1.1我们要去哪儿
本章计划
1.2数学、科学和工程学合而为
1.3寻找计算机科学中的持久原则
1.4软件系统结构的原则
1.5效率与权衡
1.6软件工程原则
1.7数学方法
1.8关于编程符号的一些注释
1.9后续内容简介
1.10本章小结
第2章面向对象编程导论
2.1介绍
本章计划
2.2绘制矩形ApPkt
2.2。1学习内容
2.2.2复习题
2.2.3练习
2.3Draw5hapesApplet
2.3.1学习内容
2.3.2复习题
2.3.3练习
2.4结论
2.4.1学习内容
2.4.2复习题
2.4.3练习
2.5陷阱
2.6提示和技巧
2,7参考资料
2.8本章小结
第3章链式数据表示
3.1介绍
本章计划
3.2什么是指针
3.2.1学习内容
3.2.2链式表示的两个实例
3.3使用Java的隐式指针
3.3.1学习内容
3.3.2复习题
3.3.3练习
3.4指针图例表示法
3.4.1学习内容
3.4.2复习题
3,4.3练习
3.5线性链表
3.5.1学习内容
3.5.2在链表中插入新的次节点
3.5.3声明Java链表类
3.5.4在链表中搜索某节点项
3.5.5删除链表的末端节点
3.5.6在链表中插入新的末端节点
3.5.7如何打印链表
3.5.8把所有东西合在一起
3.5.9现在还要做什么
3.5.10复习题
3.5.11练习
3.6其他链式数据结构
3.6.1学习内容
3.6.2复习题
3.6.3练习
3.7陷阱
3.8提示与技巧
3.9参考资料
3.10本章小结
第4章递归
4.1介绍
本章计划
4.2递归地思考
4.2.1学习内容
4.2.2如何递归累加
4.2.3调用树与调用轨迹
4.2.4递归连乘
4.2.5逆转链表与数组
4.2.6逆转数组
4.2.7归纳思想
4.2.8复习题
4.2.9练习
4.3常见陷阱——无穷回归
4.3.1学习内容
4.3.2复习题
4,3.3练习
4.4一个指数级运行时间的递归算法
4.4,1学习内容
4.4.2汉诺塔
4,4.3复习题
4,4.4练习
4.5陷阱
4.6提示与技巧
4.7参考资料
4,8本章小结
第5章模块化与数据抽象
5.1介绍
本章计划
5.2优先队列——一种抽象数据类型
5.2.1学习内容
5.2.2优先队列A1)T接口
5.2.3复习题
5.2.4练习
5.3优先队列的两种实现
5.3.1学习内容
5.3.2利用已排序链表实现优先队列
5.3.3利用未排序数组实现优先队列
5.3.4复习题
5.3.5练习
5.4在优先队列中填人新型对象
5.4.1学习内容
5.4.2复习题
5.4.3练习
5.5程序设计中的模块化与信息隐藏
5.5.1学习内容
5.5.2复习题
5.6陷阱
5.7提示与技巧
5.8参考资料
5.9本章小结
第6章线性数据结构——堆栈与队列
6.1介绍
本章计划
6,2堆栈的一些背景知识
6.2.1学习内容
6.2.2复习题
6.2.3练习
6.3堆栈与队列的ADT
6.3.1学习内容
6.3.2堆栈类与队列类的接口
6.3.3复习题
6.3.4练习
6.4使用堆栈ADT检查括号对称性
6.4.1学习内容
6.4.2复习题
6.4.3练习
6.5利用堆栈ADT计算后缀表达式
6.5.1学习内容
6.5.2复习题
6.5.3练习
6.6实现堆栈ADT
6.6.1学习内容
6.6.2顺序堆栈表示
6.6.3链式堆栈表示
6.6.4复习题
6.6.5练习
6.7Java如何利用堆栈实现递归方法调用
6.7,1学习内容
6.7.2复习题
6.7.3练习
6.8队列A1)T的实现
6.8.1学习内容
6.8.2顺序队列表示
6.8.3链式队列表示
6.8.4比较链式队列表示与顺序队列表示
6.8.5复习题
6.8.6练习
6.9其他队列应用
6.9.1学习内容
6.9;2操作系统中的队列
6.9.3在模拟试验中使用队列
6,9.4复习题
6.9.5练习
6.10陷阱
6.11提示与技巧
6.12参考资料
6.13本章小结
第7章链表、字符串和动态内存分配
7.1引言和动机
本章计划
7.2表
7.2,1学习内容
7.2.2表的ADT
7.2.3顺序表表示
7,2.4单向链表表示
7.2.5比较顺序和链式表示
7.2.6其他链表表示
7.2.7循环链表
7.2.8双向链表
7,2.9带有头节点的链表
7.2.10复习题
7.2.11练习
7.3广义表
7.3.1学习内容
7.3.2复习题
7.3.3练习
7.4广义表的应用
7.4.1学习内容
7.4.2复习题
7.4.3练习
7.5字符串
7.5.1学习内容
7.5.2Java中的只读字符串
7.5.3Java中的StringBuffer
7.5.4在文本文件和字处理程序中的字符串表示方法
7.5.5复习题
7.5.6练习
7.6动态内存分配
7.6.1学习内容
7.6.2可用空间列表和垃圾收集
7.6.3堆和动态内存分配
7.6,4最先适配
7.6.5最佳适配
7.6.6分段存储与合并
7.6.7压缩以对应分配失败
7.6.8比较各种应用中堆的使用
7.6.9引用计数
7.6.10复习题
7.6.11练习
7,7陷阱
7.8揭示与技巧
7.9参考资料
7.10本章小结
第8章树与图
8.1介绍
本章计划
8.2树——基本概念与术语
8.2.1学习内容
8.2.2复习题
8.2.3练习
8.3二叉树
8.3.1学习内容
8.3.2复习题
8.3.3练习
8.4顺序二叉树表示
8.12图——基本概念与术语
8.12.1学习内容
8.12.2一些正式定义
8.12.3路径、环路与邻接
8.12.4连通性与子图
8.12.5邻接点集与度
8.12.6复习题
8.12.7练习
8.13图的表示
8.13.1学习内容
8.13.2复习题
8.13.3练习
8.14图的搜索
8.14.1学习内容
8.14.2复习题
8,14.3练习
8.15拓扑排序
8.15.1学习内容
8.15.2复习题
8.15.3练习
8,16陷阱
8,17提示与技巧
8,18参考资料
8,19本章小结
第9章散列和TableADT
9,1介绍
本章计划
9.2TableADT
9.2.1学习内容
9.2.2复习题
9.2.3练习
9.3通过简单的示例介绍散列技术
9.3.1学习内容
9.3.2复习题
9.3.3练习
9.4冲突、负载因子和集群
9.4.1学习内容
9.4.2冲突
9.4.3vonMises的概率讨论
9.4.4负载因子和集群
9.4.5复习题
9.4.6练习
9.5使用开放定址的散列算法
9.5.1学习内容
9.5.2基本群集和它消失的两个示例
9.5.3保证探测序列会覆盖整个表
9,5.4性能公式
9.5.5比较理论和经验结果
9.5.6复习题
9.5.7练习
9,6选择散列函数
9.6.1学习内容
9.6.2除余法
9.6.3其他的散列函数方法
9.6.4复习题
9.6.5练习
9.7使用TableADT的查找方法比较
9.7.1学习内容
9.7.2复习题
9.7,3练习
9.8陷阱
9,9提示与技巧
9.10参考资料
9.11本章小结
第10章排序
10.1介绍
本章计划
10,2背景知识
10.2.1学习内容
10.2.2复习题
10.2.3练习
10.3优先队列排序方法
10.3.1学习内容
10.3.2一些预设
10.3.3优先队列排序
10.3.4SelectionSort
10.3.5HeapSort
10.3.6复习题
10.3.7练习
10.4分而治之方法
10.4.1学习内容
10.4.2MergeSort
10.4.3QuickSort
10.4.4复习题
10.4.5练习
10.5插入关键字且保持有序的方法
10.5.1学习内容
10.5.21nsertionSort
10.5.3TreeSoa
10.5.4复习题
10,5.5练习
10.60(n)方法——地址计算排序
10,6.1学习内容
10.6,2ProxmapSort
10.6.3RadixSort
10,6.4复习题
10,6.5练习
10.7其他方法
10.7.1学习内容
10.7.2ShellSort
10.7,3BubbleSon
10.7.4复习题
10.7.5练习
10.8比较与展望
10.8.1学习内容
10.8.2一些简单的智慧,
10.8.3复习题
10.8.4练习
10.9陷阱
10.10提示与技巧
10.11参考资料
10.12本章小结
附录AJAVATM要点回顾
A.1JAVATM向导
本附录计划
A.2标识符、保留字、名称和变量
A.2.1学习内容
A.2.2复习题
A.2.3练习
A.3Java中的数据类型
A.3.1Java中的引用数据类型
A.3.2复习题
A.3.3练习
A.4Java操作符和表达式
A.4.1Java中的操作符优先级和结合
A.4.2复习题
A.4.3练习
A.5Java中的控制流
A.5.1选择语句
A.5.2循环语句
A.5.3break、continue和return语句
A.5.4复习题
A.5.5练习
A.6Java中的类、方法和对象
A.6.1学习内容
A.6,2复习题
A.6.3练习
A.7在Java中引入包
A.7.1学习内容
A.7.2复习题
A.7.3练习
A.8Java中的注释
A.8.1学习内容
A.8.2复习题
A.8.3练习
A.9参考资料
附录B表示效率的语言
B.1介绍
本附录计划
B.2我们用什么来作为衡量标准
B.2.1学习内容
B.2.2复习题
B.2.3练习
B.3O-符号意义的直观认识
B.3.1学习内容
B.3.2注意
B.3.3本书其余部分所涉及的内容
B.3.4复习题
B.3.5练习
B.4O-符号的定义和操纵
B.4.1学习内容
B.4.2O-符号的正式证明的例子
B.4.3用于操纵O—符号的实用的简化操作
B.4.4复习题
B.4.5练习
B.5O-表示法没有包含的知识
B.5.1学习内容
B,5,2复习题
B.5.3练习
B,6参考资料
B,7本附录小结
附录C软件工程概念
C.1介绍
本附录计划
C,2面向对象设计与自顶向下编程
C.2.1学习内容
C.2.2你是否有张获奖彩票
C.2.3选定Table的数据表示
C,2.4第二种求精
C,2,5复习题
C.2,6练习
C.3程序正确性证明
C.3.1学习内容
C.3.2一个小错误
C.3.3形式逻辑一瞥
C.3.4复习题
C.3.5练习
C.4程序转换与优化
C.4.1学习内容
C.4.2复习题
C.4.3练习
C.5测试程序
C.5.1学习内容
C.5.2自底向上测试
C.5.3单元测试、带格式的调试辅助器与测试容器
C.5.4集成测试
C.5.5可接受性测试与回归测试
C.5.6自顶向下测试与桩
C.5.7测试计划
C.5.8测试与验证的角色比较
C.5.9复习题
C.5.10练习
C.6度量与调节哲学
C.6.1学习内容
C.6.2比较一些二叉搜索方法
C.6.3复习题
C,6.4练习
C.7软件重用与自底向上编程
C.7.1学习内容
C.7,2复习题
C,7.3练习
C.8程序结构化与文档
C.8.1学习内容
C.8.2编程风格原则
C.8.3文档
C.8.4复习题
C.8.5练习
C,9陷阱
C.10提示与技巧
C.11参考资料
C.12附录小结