数据结构与算法分析(Java语言描述)(第2版)

编辑:知识号互动百科 时间:2017-03-27 08:00:49
编辑 锁定
本书是为数据结构入门课程(通常课号是CS-2)而编写的教材。作者Frank Carrano在编写过程自始至终特别考虑到了Java与对象,为教师和学生提供了一种精心设计并经过教学实验的方式借助Java讲授ADT和对象。本书独特的设计将内容组织为相对较短的章。这种方式使学习更容易,并留出了教学的机动性。本书教给学生如何使用线性表、词典、栈、队列等等来组织数据。利用这些数据组织方式,学生们将学到算法设计的相关技术。书中的“编程提示”给读者额外的编程建议;大量的插图使讲解更形象生动;自测题贯穿各章,书末还给出了答案。本书适合作为数据结构的教学用书。[1] 
书    名
数据结构与算法分析(Java语言描述)(第2版)
ISBN
9787302162698
定    价
98元
出版时间
2012.09.10
装    帧
平装
印    次
1-2

数据结构与算法分析(Java语言描述)(第2版)图书简介

编辑
数据结构”是计算机专业的基础与核心课程之一,也是从事软件开发必不可少的入门和常用知识。
程序编写得好不好,很大程度上取决于编程者对数据结构是否熟练地掌握和恰当地运用。
由于它不仅重要,而且易学难精,“数据结构”一直都被列入相关专业的研究生入学考试和相关行业的公司招聘考试的重点考查范围。[2] 
由于“数据结构”这门课程本身的特点,它必须依托于一种程序设计语言才能讲授,否则就成了空中楼阁、纸上谈兵。因此,尽管从抽象和逻辑的角度看来都大同小异,按照所依托的程序设计语言可以把“数据结构”的教材分为不同的版本--诸如Pascal版、C版、C++版以及Java版。
除了由于程序设计语言的不同特性而导致的程序实现上的差异,不同版本的“数据结构”教材所讲述的主要内容并无本质区别。因此,初学者可以根据自己已经掌握的或者将作为主要使用的程序设计语言选择相应版本的“数据结构”教材来学习。
将来如果换用另一种程序设计语言,也不需要重新学习另一个版本的“数据结构”教材,只需将其作为参考,查阅同样的数据结构是如何用另一种语言实现的即可。这也是为什么不同版本的“数据结构”教材都有其存在的意义。[2] 

数据结构与算法分析(Java语言描述)(第2版)图书目录

编辑
引言1
第1章 Java类2
1.1 对象与类2
1.2 在Java类中使用方法5
1.3 定义Java类7
1.3.1 方法定义8
1.3.2 实参与形参10
1.3.3 传递实参11
1.3.4 Name类的定义14
1.3.5 构造函数16
1.3.6 toString方法18
1.3.7 调用其他方法的方法 …18
1.3.8 返回所属类实例
的方法20
1.3.9 静态域与静态方法20
1.3.10 方法的重载22
1.4 枚举类23
1.5 包26
本章小结27
练习28
项目设计31
第2章 从已有类创建新类35
2.1 合成35
2.1.1 通用类型38
2.1.2 适配器41
2.2 继承42
2.2.1 从构造函数中调用构造
函数45
2.2.2 基类的私有域与私有
方法46
2.2.3 受保护的访问47
2.2.4 方法的覆盖与重载47
2.2.5 多重继承52
2.3 类型兼容性与基类53
2.3.1 Object类54
2.3.2 抽象类与抽象方法56
2.4 多态性58
本章小结63
练习64
项目设计68
第3章 类的设计70
3.1 封装70
3.2 方法的说明72
3.3 接口76
3.3.1 编写接口76
3.3.2 实现接口78
3.3.3 作为数据类型的
接口79
3.3.4 接口的通用类型80
3.3.5 Comparable接口80
3.3.6 扩展接口82
3.3.7 接口与抽象类83
3.3.8 符号常量85
3.4 类的选择86
3.4.1 类的确定87
3.4.2 CRC卡片88
3.5 类的复用91
本章小结91
练习92
项目设计93
第4章 线性表96
4.1 ADT线性表说明96
4.2 使用ADT线性表103
4.3 像使用自动售货机一样使用
线性表107
4.4 Java类库:List接口109
本章小结109
练习110
项目设计112
第5章 用数组实现线性表114
5.1 使用定长数组实现ADT
线性表114
5.1.1 类比114
5.1.2 Java实现116
5.2 使用动态扩展数组实现
ADT线性表124
5.2.1 扩展数组125
5.2.2 线性表的新实现127
5.3 Java类库:ArrayList与
Vector类128 5.4 用数组实现ADT线性表的优缺点132
本章小结133
练习134
项目设计135
目 录 数据结构与算法分析(Java语言描述)(第2版)第6章 用链表实现线性表136
6.1 链表136
6.1.1 在表头添加来创建链表137
6.1.2 在表末添加来创建链表138
6.1.3 在不同位置添加来创建链表 …140
6.2 使用链表实现ADT线性表142
6.2.1 私有类Node142
6.2.2 数据域与构造函数144
6.2.3 选择要实现的核心方法组145
6.2.4 在线性表的末端插入元素146
6.2.5 在线性表的指定位置插入
元素148
6.2.6 私有方法getNodeAt152
6.2.7 断言与isEmpty方法153
6.2.8 display方法154
6.3 测试不完整的实现155
本章小结157
练习158
项目设计159
第7章 完成线性表的链表实现160
7.1 从链表中删除一个元素160
7.2 完成ADT线性表的链表实现162
7.2.1 方法remove162
7.2.2 方法replace165
7.2.3 方法getEntry165
7.2.4 方法contains166
7.2.5 其他方法166
7.3 使用具有设置与获取方法的
Node类167
7.4 表尾引用170
7.5 用链表实现ADT线性表的优缺点175
7.6 Java类库:LinkedList类175
本章小结176
练习176
项目设计177
第8章 迭代器179
8.1 什么是迭代器179
8.2 Iterator接口180
8.3 独立类迭代器186
8.4 内部类迭代器189
8.4.1 基于链表实现190
8.4.2 基于数组实现194
8.5 迭代器方法为何在自己的类中197
8.6 ListIterator接口198
8.7 基于数组实现ListIterator接口204
8.8 Java类库:Iterable接口211
8.8.1 Iterable与for-each循环212
8.8.2 重温List接口212
本章小结213
练习213
项目设计216
第9章 算法的效率218
9.1 动机218
9.2 度量算法的效率220
9.3 形式化226
9.4 效率的图形表示229
9.5 ADT线性表不同实现的效率232
9.5.1 基于数组实现232
9.5.2 基于链表实现234
9.5.3 比较上述实现237
本章小结238
练习238
项目设计240
第10章 递归243
10.1 何谓递归243
10.2 跟踪递归方法248
10.3 有返回值的递归方法250
10.4 递归处理数组253
10.5 递归处理链表255
10.6 递归方法的时间效率257
10.6.1 countDown的时间效率257
10.6.2 计算xn的时间效率258
10.7 困难问题的简单解法259
10.8 简单问题的拙劣解法264
10.9 尾递归266
10.10 协同递归268
本章小结268
练习270
项目设计271
第11章 排序入门275
11.1 组织用于数组排序的Java方法276
11.2 选择排序277
11.2.1 迭代选择排序278
11.2.2 递归选择排序280
11.2.3 选择排序的效率281
11.3 插入排序282
11.3.1 迭代插入排序283
11.3.2 递归插入排序284
11.3.3 插入排序的效率286
11.3.4 链表的插入排序286
11.4 希尔排序289
11.4.1 Java代码291
11.4.2 希尔排序的效率292
11.5 算法比较293
本章小结293
练习293
项目设计296
第12章 快速排序算法298
12.1 归并排序298
12.1.1 数组的归并298
12.1.2 递归归并排序299
12.1.3 归并排序的效率302
12.1.4 迭代归并排序303
12.1.5 Java类库中的归并排序304
12.2 快速排序304
12.2.1 快速排序的效率305
12.2.2 创建划分305
12.2.3 快速排序的Java代码308
12.2.4 Java类库中的快速排序311
12.3 基数排序311
12.3.1 基数排序的伪代码313
12.3.2 基数排序的效率313
12.4 算法比较314
本章小结314
练习315
项目设计316
第13章 有序表319
13.1 ADT有序表的说明319
13.2 链表实现323
13.2.1 add方法324
13.2.2 链表实现的效率331
13.3 使用ADT线性表的实现331
本章小结336
练习336
项目设计337
第14章 继承与线性表339
14.1 使用继承实现有序表339
14.2 设计一个基类342
14.3 有序表的一种高效实现348
本章小结349
练习350
项目设计350
第15章 可变对象、不可变对象与可克隆
对象352
15.1 可变对象与不可变对象352
15.1.1 创建只读类355
15.1.2 同伴类356
15.2 可克隆对象358
15.2.1 克隆数组364
15.2.2 克隆链表366
15.2.3 克隆体的有序表370
本章小结373
练习373
项目设计376
第16章 查找377
16.1 问题描述377
16.2 查找无序数组378
16.2.1 迭代顺序查找无序数组378
16.2.2 递归顺序查找无序数组379
16.2.3 顺序查找数组的效率381
16.3 查找有序数组381
16.3.1 顺序查找有序数组381
16.3.2 折半查找有序数组382
16.3.3 Java类库: binarySearch
方法386
16.3.4 折半查找数组的效率387
16.4 查找无序链表388
16.4.1 迭代顺序查找无序链表388
16.4.2 递归顺序查找无序链表389
16.4.3 顺序查找链表的效率390
16.5 查找有序链表390
16.5.1 顺序查找有序链表390
16.5.2 折半查找有序链表391
16.6 查找方法的选择391
本章小结392
练习392
项目设计394
第17章 词典396
17.1 ADT词典的说明396
17.1.1 Java接口399
17.1.2 迭代器400
17.2 使用ADT词典402
17.2.1 电话号码簿402
17.2.2 词频407
17.2.3 词的索引411
17.3 Java类库:Map接口414
本章小结415
练习415
项目设计416
第18章 词典的实现418
18.1 基于数组的实现418
18.1.1 基于数组的无序词典419
18.1.2 基于数组的有序词典424
18.2 基于向量的实现428
18.3 基于链表的实现433
18.3.1 基于链表的无序词典434
18.3.2 基于链表的有序词典434
本章小结438
练习438
项目设计439
第19章 散列概述440
19.1 什么是散列440
19.2 散列函数442
19.2.1 计算散列码443
19.2.2 将散列码压缩为散列表的
索引445
19.3 处理冲突446
19.3.1 线性探测开放定址446
19.3.2 二次探测开放定址451
19.3.3 双散列开放定址451
19.3.4 开放定址的潜在问题453
19.3.5 链地址453
本章小结456
练习457
项目设计458
第20章 用散列实现词典459
20.1 效率459
20.1.1 装填因子460
20.1.2 开放定址的开销460
20.1.3 链地址的开销462
20.2 再散列463
20.3 处理冲突的各方案比较464
20.4 使用散列的词典实现465
20.4.1 散列表中的元素465
20.4.2 数据域与构造函数466
20.4.3 方法getValue、remove
和add467
20.4.4 迭代器473
20.5 Java类库:类HashMap475
本章小结475
练习476
项目设计476
第21章 栈478
21.1 ADT栈的说明478
21.2 利用栈处理代数表达式481
21.2.1 检查中缀代数表达式的括号
是否平衡482
21.2.2 将中缀表达式转化为后缀
表达式487
21.2.3 后缀表达式求值493
21.2.4 中缀表达式求值495
21.3 程序栈497
21.4 使用栈代替递归498
21.5 Java类库:类Stack501
本章小结502
练习502
项目设计504
第22章 栈的实现506
22.1 基于链表的实现506
22.2 基于数组的实现509
22.3 基于向量的实现513
本章小结515
练习515
项目设计516
第23章 队列、双端队列与优先队列517
23.1 ADT队列的描述517
23.2 使用队列模拟排队521
23.3 使用队列计算股份销售的资本
收益527
23.4 Java类库:Queue接口530
23.5 ADT双端队列的描述530
23.6 使用双端队列计算股份销售的资本
收益532
23.7 ADT优先队列的描述534
23.8 使用优先队列跟踪委派任务535
本章小结537
练习537
项目设计539
第24章 队列、双端队列与优先队列的
实现541
24.1 基于链表的队列实现541
24.2 基于数组的队列实现545
24.2.1 循环数组546
24.2.2 含有一个未用位置的循环
数组547
24.3 基于向量的队列实现552
24.4 基于循环链表的队列实现554
24.5 Java类库:AbstractQueue类560
24.6 基于双向链表的双端队列实现560
24.7 实现优先队列的可用方法564
24.8 Java类库:PriorityQueue类564
本章小结565
练习566
项目设计567
第25章 树569
25.1 树的概念569
25.1.1 层次化的组织569
25.1.2 树的术语571
25.2 树的遍历574
25.2.1 二叉树的遍历575
25.2.2 树的遍历576
25.3 树的Java接口577
25.3.1 所有树的接口577
25.3.2 二叉树的接口578
25.4 二叉树举例579
25.4.1 表达式树580
25.4.2 决策树581
25.4.3 二叉查找树585
25.4.4 堆587
25.5 树举例589
25.5.1 语法分析树589
25.5.2 博弈树590
本章小结590
练习591
项目设计593
第26章 树的实现595
26.1 二叉树的结点595
26.1.1 结点的接口596
26.1.2 BinaryNode的实现597
26.2 ADT二叉树的实现599
26.2.1 创建基本二叉树599
26.2.2 方法privateSetTree600
26.2.3 访问者与修改者方法603
26.2.4 计算高度与统计结点604
26.2.5 遍历605
26.3 表达式二叉树的实现610
26.4 树612
26.4.1 树的结点612
26.4.2 用二叉树表示树613
本章小结614
练习614
项目设计616
第27章 二叉查找树的实现617
27.1 预备知识617
27.1.1 二叉查找树接口618
27.1.2 重复元素620
27.1.3 开始类定义621
27.2 查找与检索622
27.3 遍历624
27.4 插入元素624
27.4.1 递归实现625
27.4.2 迭代实现628
27.5 删除元素631
27.5.1 删除叶子结点中的元素631
27.5.2 删除有一个孩子的结点中的
元素631
27.5.3 删除有两个孩子的结点中的
元素631
27.5.4 删除根结点中的元素635
27.5.5 递归实现635
27.5.6 迭代实现639
27.6 操作的效率643
27.6.1 平衡的重要性644
27.6.2 插入结点的顺序644
27.7 ADT词典的实现645
本章小结648
练习649
项目设计651
第28章 堆的实现653
28.1 再论ADT堆653
28.2 用数组表示堆654
28.3 插入元素656
28.4 删除根659
28.5 创建堆662
28.6 堆排序664
本章小结667
练习668
项目设计669
第29章 平衡查找树670
29.1 AVL树670
29.1.1 单旋转671
29.1.2 双旋转673
29.1.3 实现细节676
29.2 2-3树681
29.2.1 2-3树的查找681
29.2.2 往2-3树插入元素682
29.2.3 插入期间分裂结点683
29.3 2-4树685
29.3.1 往2-4树插入元素685
29.3.2 比较AVL树、2-3树
和2-4树 686
29.4 红黑树687
29.4.1 红黑树的特性688
29.4.2 往红黑树插入元素689
29.4.3 Java类库:类TreeMap693
29.5 B树693
本章小结694
练习695
项目设计696
第30章 图697
30.1 一些例子与术语697
30.1.1 公路地图697
30.1.2 航线700
30.1.3 迷宫700
30.1.4 先修课程701
30.1.5 树701
30.2 遍历701
30.2.1 广度优先遍历702
30.2.2 深度优先遍历704
30.3 拓扑顺序705
30.4 路径707
30.4.1 寻找路径708
30.4.2 无权图的最短路径708
30.4.3 加权图的最短路径710
30.5 ADT图的Java接口714
本章小结717
练习718
项目设计720
第31章 图的实现722
31.1 两种实现的概述722
31.1.1 邻接矩阵722
31.1.2 邻接表723
31.2 顶点与边724
31.2.1 说明类Vertex724
31.2.2 内部类Edge726
31.2.3 实现Vertex类727
31.3 ADT图的实现731
31.3.1 基本操作731
31.3.2 图的算法735
本章小结737
练习738
项目设计739
附录A Java基础741
A.1 引言741
A.1.1 应用程序和小程序741
A.1.2 对象和类741
A.1.3 第一个Java应用程序741
A.2 Java基础744
A.2.1 标识符744
A.2.2 保留字744
A.2.3 变量745
A.2.4 基本类型745
A.2.5 常量746
A.2.6 赋值语句746
A.2.7 赋值兼容性747
A.2.8 类型转换748
A.2.9 算术运算符和表达式749
A.2.10 括号和优先规则750
A.2.11 自增和自减运算符751
A.2.12 特殊赋值运算符752
A.2.13 符号常量752
A.2.14 Math类753
A.3 用键盘和屏幕进行简单的输入和
输出754
A.3.1 屏幕输出754
A.3.2 用Scanner类进行键盘
输入755
A.4 if-else语句757
A.4.1 布尔表达式758
A.4.2 嵌套语句761
A.4.3 多重if-else语句763
A.4.4 条件运算符(可选)764
A.5 switch语句764
A.6 枚举766
A.7 作用域768
A.8 循环769
A.8.1 while语句769
A.8.2 for语句770
A.8.3 do-while语句772
A.8.4 关于循环的其他信息773
A.9 String类774
A.9.1 字符串中的字符775
A.9.2 字符串的联接776
A.9.3 String方法777
A.10 StringBuilder类779
A.11 使用Scanner抽取字符串的
一部分780
A.12 数组783
A.12.1 数组形参和返回值785
A.12.2 初始化数组786
A.12.3 数组索引出界786
A.12.4 对数组使用=与==786
A.12.5 数组与for-each循环788
A.12.6 多维数组788
A.12 封装类790
附录B 异常处理796
B.1 基本的异常处理796
B.2 Java类库的异常类799
B.3 定义自己的异常类800
B.4 复合catch代码块802
B.5 finally代码块803
B.6 抛出但不捕获异常的方法804
B.7 不需要捕获的异常805
附录C 文件输入与输出807
C.1 概述807
C.1.1 数据流807
C.1.2 文件的优点807
C.1.3 文件的类型808
C.1.4 文件名809
C.1.5 包java.io809
C.2 使用PrintWriter写文本文件809
C.3 读取文本文件812
C.3.1 使用Scanner读取文本文件812
C.3.2 使用BufferedReader读取
文本文件814
C.3.3 定义打开数据流的方法816
C.4 二进制文件的I/O817
C.4.1 使用DataOutputStream写
二进制文件817
C.4.2 使用DataInputStream读取
二进制文件821
C.5 File类823
C.6 对象串行化824
附录D 文档与程序设计风格828
D.1 命名变量与类828
D.2 缩排828
D.3 注释829
D.3.1 单行注释829
D.3.2 注释块830
D.3.3 何时写注释830
D.3.4 Java文档注释830
D.3.5 运行javadoc832
附录E 自测题答案833
第1章 Java类
第2章 从已有类创建新类
第3章 类的设计
第4章 线性表
第5章 用数组实现线性表
第6章 用链表实现线性表
第7章 完成线性表的链表实现
第8章 迭代器
第9章 算法的效率
第10章 递归
第11章 排序入门
第12章 快速排序算法
第13章 有序表
第14章 继承与线性表
第15章 可变对象、不可变对象与可克隆对象
第16章 查找
第17章 词典
第18章 词典的实现
第19章 散列概述
第20章 用散列实现词典
第21章 栈
第22章 栈的实现
第23章 队列、双端队列与优先队列
第24章 队列、双端队列与优先队列的实现
第25章 树
第26章 树的实现
第27章 二叉查找树的实现
第28章 堆的实现
第29章 平衡查找树
第30章 图
第31章 图的实现[3] 
参考资料
词条标签:
计算机学 计算机书籍 科技 出版物 互联网 书籍