第1部分 入门 3
第1章 表达式、变量和赋值 3
1.1简介 3
1.2我的第一个Java程序 3
1.2.1一个最简单的程序 3
1.2.2 Hello World 4
1.3用作计算器的表达式和程序 5
1.3.1算术运算和优先级次序 6
1.3.2数学函数 8
1.3.3声明常量 9
1.4给Java程序加注释 9
1.5缩进程序 10
1.6变量、赋值和类型检查 10
1.6.1用于存储中间值的变量 11
1.6.2为赋值和强制转换进行类型检查 14
1.6.3赋值的内部机制 16
1.7递增/递减变量 17
1.7.1递增的一般机制 17
1.7.2前递增与后递增 18
1.7.3用于求解二次方程的计算程序 19
1.8 Java输入/输出(I/O)基础 19
1.8.1计算并不意味着显示 20
1.8.2键盘输入 21
1.8.3文件重定向 22
1.9错误和调试的艺术 24
1.10集成开发环境(IDE) 26
1.11习题 27
1.11.1教师注意事项 27
1.11.2第一组习题 28
第2章 条件结构和循环 30
2.1指令工作流程 30
2.2条件结构:简单选择和多重选择 30
2.2.1分支条件:if…else… 30
2.2.2用于分支指令的三元运算符:谓词?A:B 32
2.2.3嵌套的条件语句 33
2.2.4用于比较的关系和逻辑运算符 35
2.2.5多重选择:switch case 37
2.3块和变量的作用域 39
2.3.1指令块 39
2.3.2嵌套块和变量作用域 40
2.4循环结构 41
2.4.1循环语句:while 41
2.4.2循环语句:do-while 42
2.4.3循环语句:for 44
2.4.4布尔算术表达式 45
2.5展开循环和程序终止 46
2.5.1展开循环 46
2.5.2永不终止的程序 46
2.5.3等价于通用while结构的循环 47
2.5.4随时利用break中止循环 47
2.5.5循环和程序终止 47
2.6验证程序:语法、编译和数值错误 48
2.7从命令行解析程序参数 50
2.8习题 52
第3章 函数和递归函数 55
3.1编写函数的优点 55
3.2声明和调用函数 55
3.2.1原型化函数 55
3.2.2基本函数的示例 57
3.2.3一个更精心设计的示例:迭代式阶乘函数 58
3.2.4带有条件语句的函数 59
3.3静态(类)变量 60
3.4函数参数的按值传递 62
3.4.1基本的参数传递机制 62
3.4.2局部内存和函数调用栈 63
3.4.3函数的副作用:改变调用环境 65
3.4.4函数签名和函数重载 67
3.5递归 68
3.5.1再论阶乘函数:一个递归函数 69
3.5.2斐波纳奇数列 70
3.5.3对数平均值 71
3.6终结递归以提高程序效率 72
3.7递归和图形 73
3.8中止问题:不可判定的任务 76
3.9习题 77
第4章 数组 80
4.1为什么程序员需要数组 80
4.2声明和初始化数组 80
4.2.1声明数组 80
4.2.2创建和初始化数组 81
4.2.3获取数组的大小:length 82
4.2.4数组的索引范围和越界异常 83
4.2.5释放内存和垃圾收集器 84
4.3数组引用的基本概念 84
4.4将数组用作函数参数 87
4.5多维数组:数组的数组 91
4.5.1规则的多维数组 91
4.5.2不规则的多维数组 93
4.6字符串数组和main函数 95
4.7数组的基本应用:查找 97
4.8习题 99
第2部分 数据结构与算法 105
第5章 对象和字符串 105
5.1为什么程序员需要对象 105
5.2声明类和创建对象 106
5.2.1构造函数和对象创建 107
5.2.2公共的null对象 109
5.2.3将对象用作参数的静态(类)函数 109
5.3对象和引用 111
5.3.1复制对象:克隆 112
5.3.2测试对象相等性 112
5.4对象的数组 114
5.5带有数组成员的对象 115
5.6标准化的String对象 116
5.6.1声明String变量并赋值 116
5.6.2字符串的长度:length() 117
5.6.3字符串的相等性测试:equals(String str) 117
5.6.4比较字符串:字典序 118
5.7再论基本的程序骨架 121
5.8习题 122
第6章 查找和排序 126
6.1概述 126
6.2查找信息 126
6.3顺序查找 128
6.3.1顺序查找的复杂度 130
6.3.2动态添加对象 130
6.3.3二分/分半查找 132
6.4对数组进行排序 134
6.4.1通过选择进行排序:SelectionSort 134
6.4.2把选择排序扩展到对象 136
6.4.3选择排序的复杂度 138
6.5快速排序:递归排序 139
6.5.1快速排序的复杂度分析 140
6.6通过散列查找 140
6.7习题 143
第7章 链表 144
7.1简介 144
7.2单元和链表 144
7.2.1说明单元和链表的概念 144
7.2.2将链表作为一种抽象数据结构 145
7.2.3在Java中编写链表的程序 145
7.2.4遍历链表 146
7.2.5存储String元素的链表 147
7.2.6链表的长度 148
7.2.7动态插入:向链表中添加元素 149
7.2.8用于链表的优美打印程序 150
7.2.9从链表中删除元素 151
7.2.10编写链表的程序时常见的错误 152
7.3链表上的递归 152
7.4复制链表 154
7.5通过数组创建链表 155
7.6存储链表 156
7.6.1合并有序的链表 156
7.6.2链表的递归排序 158
7.7关于链表的总结 160
7.8链表的应用:散列 160
7.8.1开放地址散列 162
7.8.2利用链表解决冲突 164
7.9几种核心数据结构的比较 165
7.10习题 165
第8章 面向对象的数据结构 168
8.1简介 168
8.2队列:先进先出(FIFO) 168
8.2.1队列作为抽象数据结构:接口 168
8.2.2基本的队列实现:静态函数 169
8.2.3队列的应用:集合枚举 171
8.3优先级队列和堆 173
8.3.1检索最大的元素 174
8.3.2添加元素 174
8.3.3删除最上面的元素 176
8.4面向对象的数据结构:方法 177
8.5再论面向对象风格的数据结构 182
8.5.1面向对象的优先级队列 182
8.5.2面向对象的链表 183
8.6栈:后进先出(LIFO)的抽象数据结构 186
8.6.1栈接口和数组实现 186
8.6.2利用链表实现泛型栈 188
8.7习题 190
第9章 优化问题的范型 191
9.1简介 191
9.2穷尽搜索 192
9.2.1填充背包 192
9.2.2图解回溯法:八皇后问题 198
9.3贪心算法:用于获得有保证的近似解的试探法 202
9.3.1 0-1背包问题的近似解 202
9.3.2用于求解集合覆盖问题的贪心算法 207
9.4动态规划:0-1背包问题的最优解 213
9.5优化范型:复杂度分析概述 216
9.6习题 217
第10章 计算的科学 220
10.1数字世界 220
10.2计算的本性 222
10.3数字方程 222
10.4算法的起源和计算机 223
10.5 21世纪的计算机科学 223
第3部分 考试复习 227
第11章 考试与解答 227
参考文献 247