Java数据结构和算法第二版.pdf
http://www.100md.com
2020年11月11日
![]() |
| 第1页 |
![]() |
| 第6页 |
![]() |
| 第17页 |
![]() |
| 第23页 |
![]() |
| 第31页 |
![]() |
| 第60页 |
参见附件(25750KB,584页)。
《Java数据结构和算法》(第2版)介绍了计算机编程中使用的数据结构和算法,对于在计算机应用中如何操作和管理数据以取得最优性能提供了深入浅出的讲解

本书相关内容
本书是一本有关计算机编程中所应用的数据结构和算法的书。数据结构是指数据在计算机存储空间中(或磁盘中)的安排方式。算法是指软件程序用来操作这些结构中的数据的过程。
几乎所有的计算机程序都使用数据结构和算法,即使最简单的程序也不例外。比如设想一个打印地址标签的程序,这个程序使用一个数组来存储地址,并且使用一个简单的for循环来遍历数组,打印每一个地址。
在上面例子中的数组就是一个数据结构,用for循环来顺序访问该数组,这就构造了一个简单的算法。对于一个仅有少量数据的简单程序来说,上述的这种方法已经足够了。但是如果用程序来处理中等规模以上的数据或解决那些不太平常的问题时,就需要用一些更加复杂的技术来应付它们。仅仅知道诸如Java或C++等计算机语言的语法是远远不够的。
本书提供了学完一门编程语言后进一步需要知道的知识。本书所涵盖的内容通常作为大学或学院中计算机系二年级的课程,在学生掌握了编程的基础后才开始本书的学习。
本书的不同之处
有关数据结构和算法的书很多,本书的不同之处有如下三条:我们在写书过程中的主要目标是使本书所涉及到的知识尽可能地容易理解。
书中称作专题applet(Workshop applet)的演示程序可以将知识生动化,它可以一步一步地通过“活动的图像”来展示数据结构和算法是如何工作的。
示例程序是用Java编写的,它比那些传统的用来演示计算机问题的语言,如c.C+或Pascal更好理解
让我们来更加详细地讨论上述特性。
第二版的新颖之处
本书的第二版在第一版的基础上有所扩充,使之能更好地适应教师的计算机科学课堂教学,并使读者在阅读上更加容易。除去新增的章节,还添加了章末问题、实验和编程作业。
新增章节
在本版中加入了许多有趣的新内容。其中许多为编制上机作业提供了基础。这些新主题有:深度优先搜索和游戏模拟
约瑟夫(Josephus)问题
数据压缩中的赫夫曼编码
旅行售货员问题
汉密尔顿(Hamilton)回路
骑士旅行问题
弗洛伊德(Floyd)算法
沃赛尔(Warshall)算法
2-3树背包问题
从n个事物中取k个的组合方案
哈希函数的数字折叠法
基数排序
本书的组织结构
本节是为教师和那些希望快速了解本书内容的人而准备的。下面的内容假定读者对数据结构和算法中的问题和术语已经相当熟悉。
前两章试图使读者尽可能轻松地进入数据结构和算法的世界。
第1章“综述”,给读者一个各主题的总体印象并介绍少量后面要用到的术语。对于那些对面向对象编程不太熟悉的读者,本章总结了一些相关的知识。对于那些知道C++而不熟悉Java的程序员,本章对这两种语言的主要差别进行了描述。
第2章“数组”,集中讨论数组。这里面包含有两层意思:如何使用类来对数据存储结构进行封装和类的接口。其中包括数组和有序数组的查找、插入、删除、线性查找和二分查找。专题applet通过对无序和有序的数组进行操作来解释上述算法.
第3章“简单排序”介绍三种简单的(但是慢速的)排序方法:冒泡排序、选择排序和插入排序。每一种排序都有一个相应的专题applet.
第4章“栈和队列”涉及到三种可以被认为是抽象数据类型(ADT)的数据结构:栈、队和优先级队列。这些结构在本书中大量重复出现,是许多算法的基础。每一种结构都有一个相应的专题appleto ADT的概念也会在本章中讨论。
第5章“链表”介绍了链表中的双向链表和双端链表。本章还解释了Java中被称作“无痛指针”
的使用,并用一个专题applet演示了链表的插入、查找和删除是如何进行的。
第6章“递归”探索了递归的知识,这是书中仅有的非数据结构的几章之一。本章给出了大量的递归例子,包括汉诺塔问题和归并排序,它们都有相应的专题applet.
第7章“高级排序”研究了几种高级的排序方法:希尔排序和快速排序。专题applet演示了希尔排序,快速排序的基础-划分(partitioning)和两种形式的快速排序,第8章“二叉树”开始了对树的探索。本章中介绍了最简单最通用的树型结构:不平衡的二叉搜索树。一个专题applet演示了此类树的插入、删除和遍历是如何进行的。
第9章“红-黑树”解释了红-黑树,它是最有效的平衡树之一。专题applet演示了平衡这种树所需的旋转和颜色转换。
第10章"2-3-4树和外部存储”将2-3-4树作为多叉树的一个例子进行了讲解。专题applet会演示它们是如何工作的。我们还将讨论2-3树和2-3-4树与B树的关系,这些知识对于存储外部(磁盘)的文件十分有用。
第11章“哈希表”转到哈希表这个新的讨论领域。专题applet演示了几种方法:线性、二次探测和再哈希及链地址法。本章中还讨论了哈希表方法在组织外部文件方面的应用。
第12章“堆”讨论了一种特殊的树-堆,用它作为优先队列的一种有效的实现手段。
第13章“图”和第14章“带权图”处理图的相关问题,前者处理未加权图和简单的查找算法,后者处理带权图和更加复杂的算法,如最小生成树和最短路径。
第15章“应用场合”总结了前几章描述过的各种数据结构,还着重讨论了如何在给定情况下应用合适的数据结构的问题。
附录A"运行专题applet和示例程序”提供了如何使用这两种软件的细节。此部分同时讲解了如何使用来自Sun公司的软件开发工具集,可以用它来修改示例程序或开发自己的程序,还可以通过它来运行专题applet和示例程序。
附录B“进一步学习”介绍了一些关于数据结构和相关内容的进阶书籍。
附录C“问题答案”包括了书中章末问题的解答。
Java数据结构和算法第二版截图




封面页
书名页
版权页
前言页
目录页
第1章 综述
数据结构和算法能起到什么作用?
数据结构的概述
算法的概述
一些定义
面向对象编程
软件工程
对于C++程序员的Java
Java数据结构的类库
小结
问题
第2章 数组
Array专题Applet
Java中数组的基础知识
将程序划分成类
类接口
Ordered专题applet
有序数组的Java代码
对数
存储对象
大O表示法
为什么不用数组表示一切?
小结
问题
实验
编程作业
第3章 简单排序 如何排序?
冒泡排序
选择排序
插入排序
对象排序
几种简单排序之间的比较
小结
问题
实验
编程作业
第4章 栈和队列
不同的结构类型
栈
队列
优先级队列
解析算术表达式
小结
问题
实验
编程作业
第5章 链表
链结点(Link)
LinkList专题Applet
单链表
查找和删除指定链结点
双端链表
链表的效率
抽象数据类型
有序链表
双向链表
迭代器
小结 问题
实验
编程作业
第6章 递归
三角数字
阶乘
变位字
递归的二分查找
汉诺(Hanoi)塔问题
归并排序
消除递归
一些有趣的递归应用
小结
问题
实验
编程作业
第7章 高级排序
希尔排序
划分
快速排序
基数排序
小结
问题
实验
编程作业
第8章 二叉树
为什么使用二叉树?
树的术语
一个类比
二叉搜索树如何工作
查找节点
插入一个节点 遍历树
查找最大值和最小值
删除节点
二叉树的效率
用数组表示树
重复关键字
完整的tree.java程序
哈夫曼(Huffman)编码
小结
问题
实验
编程作业
第9章 红-黑树
本章讨论的方法
平衡树和非平衡树
使用RBTree专题applet
用专题applet做试验
旋转
插入一个新节点
删除
红-黑树的效率
红-黑树的实现
其他平衡树
小结
问题
实验
第10章 2-3-4树和外部存储
2-3-4树的介绍
Tree234专题applet
2-3-4树的Java代码
2-3-4树和红-黑树
2-3-4树的效率 2-3树
外部存储
小结
问题
实验
编程作业
第11章 哈希表
哈希化简介
开放地址法
链地址法
哈希函数
哈希化的效率
哈希化和外部存储
小结
问题
实验
编程作业
第12章 堆
堆的介绍
Heap专题applet
堆的Java代码
基于树的堆
堆排序
小结
问题
实验
编程作业
第13章 图
图简介
搜索
最小生成树
有向图的拓扑排序 有向图的连通性
小结
问题
实验
编程作业
第14章 带权图
带权图的最小生成树
最短路径问题
每一对顶点之间的最短路径问题
效率
难题
小结
问题
实验
编程作业
第15章 应用场合
通用数据结构
专用数据结构
排序
图
外部存储
前进
附录A 运行专题applet和示例程序
专题applet
示例程序
Sun Microsystem软件开
发工具集
重名的类文件
其他开发系统
附录B 进一步学习
数据结构和算法
面向对象程序语言 面向对象设计(OOD)和软件工程
附录C 问题答案
第1章,综述
第2章,数组
第3章,简单排序
第4章,栈与队列
第5章,链表
第6章,递归
第7章,高级排序
第8章,二叉树
第9章,红-黑树
第10章,2-3-4树和外部存储
第11章,哈希表
第12章,堆
第13章,图
第14章,带权图
附录页 ......
书名页
版权页
前言页
目录页
第1章 综述
数据结构和算法能起到什么作用?
数据结构的概述
算法的概述
一些定义
面向对象编程
软件工程
对于C++程序员的Java
Java数据结构的类库
小结
问题
第2章 数组
Array专题Applet
Java中数组的基础知识
将程序划分成类
类接口
Ordered专题applet
有序数组的Java代码
对数
存储对象
大O表示法
为什么不用数组表示一切?
小结
问题
实验
编程作业
第3章 简单排序 如何排序?
冒泡排序
选择排序
插入排序
对象排序
几种简单排序之间的比较
小结
问题
实验
编程作业
第4章 栈和队列
不同的结构类型
栈
队列
优先级队列
解析算术表达式
小结
问题
实验
编程作业
第5章 链表
链结点(Link)
LinkList专题Applet
单链表
查找和删除指定链结点
双端链表
链表的效率
抽象数据类型
有序链表
双向链表
迭代器
小结 问题
实验
编程作业
第6章 递归
三角数字
阶乘
变位字
递归的二分查找
汉诺(Hanoi)塔问题
归并排序
消除递归
一些有趣的递归应用
小结
问题
实验
编程作业
第7章 高级排序
希尔排序
划分
快速排序
基数排序
小结
问题
实验
编程作业
第8章 二叉树
为什么使用二叉树?
树的术语
一个类比
二叉搜索树如何工作
查找节点
插入一个节点 遍历树
查找最大值和最小值
删除节点
二叉树的效率
用数组表示树
重复关键字
完整的tree.java程序
哈夫曼(Huffman)编码
小结
问题
实验
编程作业
第9章 红-黑树
本章讨论的方法
平衡树和非平衡树
使用RBTree专题applet
用专题applet做试验
旋转
插入一个新节点
删除
红-黑树的效率
红-黑树的实现
其他平衡树
小结
问题
实验
第10章 2-3-4树和外部存储
2-3-4树的介绍
Tree234专题applet
2-3-4树的Java代码
2-3-4树和红-黑树
2-3-4树的效率 2-3树
外部存储
小结
问题
实验
编程作业
第11章 哈希表
哈希化简介
开放地址法
链地址法
哈希函数
哈希化的效率
哈希化和外部存储
小结
问题
实验
编程作业
第12章 堆
堆的介绍
Heap专题applet
堆的Java代码
基于树的堆
堆排序
小结
问题
实验
编程作业
第13章 图
图简介
搜索
最小生成树
有向图的拓扑排序 有向图的连通性
小结
问题
实验
编程作业
第14章 带权图
带权图的最小生成树
最短路径问题
每一对顶点之间的最短路径问题
效率
难题
小结
问题
实验
编程作业
第15章 应用场合
通用数据结构
专用数据结构
排序
图
外部存储
前进
附录A 运行专题applet和示例程序
专题applet
示例程序
Sun Microsystem软件开
发工具集
重名的类文件
其他开发系统
附录B 进一步学习
数据结构和算法
面向对象程序语言 面向对象设计(OOD)和软件工程
附录C 问题答案
第1章,综述
第2章,数组
第3章,简单排序
第4章,栈与队列
第5章,链表
第6章,递归
第7章,高级排序
第8章,二叉树
第9章,红-黑树
第10章,2-3-4树和外部存储
第11章,哈希表
第12章,堆
第13章,图
第14章,带权图
附录页 ......
您现在查看是摘要介绍页, 详见PDF附件(25750KB,584页)。





