重磅推荐
【编辑推荐】
算法是一切程序设计的基础和灵魂,更是一位程序员编程水平高低的集中体现。
涵盖广泛:精炼的理论讲述嵌入经典算法示例,学习查询兼而有之。
阐述到位:算法思想、算法实现和经典面试题合理搭配,相辅相成。
实例完善:分析精准,注释精确,保证每段代码皆可通过编译执行。
超过600分钟讲解视频和案例源代码倾囊相送。
附赠5本电子书教程铺就Java程序员成长之路。
【内容简介】
本书分三篇,共14章,分别介绍了算法基础、算法应用和算法面试题。首先介绍了算法概述,然后重点分析了数据结构和基本算法思想;接着详细讲解了算法在排序、查找、数学计算、数论、历史趣题、游戏等领域中的应用;后梳理和精选了一些经典的算法面试题,供读者开拓思维之用。
【目录】

第1章 算法和实现算法的Java语法

1.1 建立算法初步概念 1

1.1.1 什么是算法 1

1.1.2 算法的发展历史 3

1.1.3 算法的分类 3

1.2 算法相关概念的区别 3

1.2.1 算法与公式的关系 4

1.2.2 算法与程序的关系 4

1.2.3 算法与数据结构的关系 4

1.3 算法的表示 4

1.3.1 自然语言表示 5

1.3.2 流程图表示 5

1.3.3 N-S图表示 6

1.3.4 伪代码表示 7

1.4 算法的性能评价 7

1.4.1 时间复杂度 8

1.4.2 空间复杂度 8

1.5 一个算法实例 8

1.5.1 查找数字 8

1.5.2 创建项目 10

1.5.3 编译执行 11

1.6 Java程序的基本结构 13

1.6.1 类是一个基本单元 13

1.6.2 main方法 14

1.6.3 自定义方法 14

1.6.4 System.out.println的使用 15

1.6.5 一个简单而完整的程序 15

1.7 顺序结构 16

1.8 分支结构 17

1.8.1 if...else分支结构 17

1.8.2 if...else嵌套 18

1.8.3 switch语句 19

1.8.4 编程实例 20

1.9 循环结构 21

1.9.1 while循环 22

1.9.2 do…while循环 22

1.9.3 for循环 23

1.9.4 编程实例 23

1.10 跳转结构 27

1.10.1 break 27

1.10.2 continue 27

1.10.3 编程实例 27

1.11 小结 29

第2章 数据结构

2.1 数据结构概述 30

2.1.1 什么是数据结构 30

2.1.2 数据结构中的基本概念 31

2.1.3 数据结构的内容 31

2.1.4 数据结构的分类 33

2.1.5 数据结构的几种存储方式 33

2.1.6 数据类型 34

2.1.7 常用的数据结构 35

2.1.8 选择合适的数据结构解决实际问题 36

2.2 线性表 36

2.2.1 什么是线性表 36

2.2.2 线性表的基本运算 37

2.3 顺序表结构 37

2.3.1 准备数据 38

2.3.2 初始化顺序表 38

2.3.3 计算顺序表长度 38

2.3.4 插入结点 39

2.3.5 追加结点 39

2.3.6 删除结点 40

2.3.7 查找结点 40

2.3.8 显示所有结点 41

2.3.9 顺序表操作实例 41

2.4 链表结构 45

2.4.1 什么是链表结构 45

2.4.2 准备数据 46

2.4.3 追加结点 46

2.4.4 插入头结点 47

2.4.5 查找结点 48

2.4.6 插入结点 49

2.4.7 删除结点 50

2.4.8 计算链表长度 51

2.4.9 显示所有结点 51

2.4.10 链表操作实例 51

2.5 栈结构 56

2.5.1 什么是栈结构 56

2.5.2 准备数据 57

2.5.3 初始化栈结构 57

2.5.4 判断空栈 58

2.5.5 判断满栈 58

2.5.6 清空栈 58

2.5.7 释放空间 59

2.5.8 入栈 59

2.5.9 出栈 59

2.5.10 读结点数据 60

2.5.11 栈结构操作实例 60

2.6 队列结构 63

2.6.1 什么是队列结构 63

2.6.2 准备数据 64

2.6.3 初始化队列结构 64

2.6.4 判断空队列 65

2.6.5 判断满队列 65

2.6.6 清空队列 65

2.6.7 释放空间 66

2.6.8 入队列 66

2.6.9 出队列 66

2.6.10 读结点数据 67

2.6.11 计算队列长度 67

2.6.12 队列结构操作实例 68

2.7 树结构 71

2.7.1 什么是树结构 71

2.7.2 树的基本概念 72

2.7.3 二叉树 73

2.7.4 准备数据 76

2.7.5 初始化二叉树 76

2.7.6 添加结点 77

2.7.7 查找结点 78

2.7.8 获取左子树 79

2.7.9 获取右子树 79

2.7.10 判断空树 80

2.7.11 计算二叉树深度 80

2.7.12 清空二叉树 81

2.7.13 显示结点数据 81

2.7.14 遍历二叉树 81

2.7.15 树结构操作实例 83

2.8 图结构 91

2.8.1 什么是图结构 91

2.8.2 图的基本概念 91

2.8.3 准备数据 95

2.8.4 创建图 97

2.8.5 清空图 98

2.8.6 显示图 98

2.8.7 遍历图 99

2.8.8 图结构操作实例 100

2.9 小结 103

第3章 基本算法思想

3.1 常用算法思想概述 104

3.2 穷举算法思想 104

3.2.1 穷举算法基本思想 105

3.2.2 穷举算法实例 105

3.3 递推算法思想 107

3.3.1 递推算法基本思想 107

3.3.2 递推算法实例 107

3.4 递归算法思想 109

3.4.1 递归算法基本思想 109

3.4.2 递归算法实例 109

3.5 分治算法思想 110

3.5.1 分治算法基本思想 111

3.5.2 分治算法实例 111

3.6 概率算法思想 115

3.6.1 概率算法基本思想 115

3.6.2 概率算法实例 115

3.7 小结 117

第4章 排序算法

4.1 排序算法概述 118

4.2 冒泡排序算法 119

4.2.1 冒泡排序算法 119

4.2.2 冒泡排序算法实例 120

4.3 选择排序算法 122

4.3.1 选择排序算法 122

4.3.2 选择排序算法实例 123

4.4 插入排序算法 125

4.4.1 插入排序算法 125

4.4.2 插入排序算法实例 126

4.5 Shell排序算法 127

4.5.1 Shell排序算法 128

4.5.2 Shell排序算法实例 129

4.6 快速排序算法 130

4.6.1 快速排序算法 131

4.6.2 快速排序算法实例 132

4.7 堆排序算法 134

4.7.1 堆排序算法 134

4.7.2 堆排序算法实例 138

4.8 合并排序算法 141

4.8.1 合并排序算法 141

4.8.2 合并排序算法实例 144

4.9 排序算法的效率 147

4.10 排序算法的其他应用 147

4.10.1 反序排序 147

4.10.2 字符串数组的排序 150

4.10.3 字符串的排序 153

4.11 小结 155

第5章 查找算法

5.1 查找算法概述 156

5.2 顺序查找 157

5.2.1 顺序查找算法 157

5.2.2 顺序查找操作实例 157

5.3 折半查找 159

5.3.1 折半查找算法 159

5.3.2 折半查找操作实例 161

5.4 数据结构中的查找算法 163

5.4.1 顺序表结构中的查找算法 164

5.4.2 链表结构中的查找算法 167

5.4.3 树结构中的查找算法 171

5.4.4 图结构中的查找算法 171

5.5 小结 172

第6章 基本数学问题

6.1 判断闰年 173

6.2 多项式计算 175

6.2.1 一维多项式求值 175

6.2.2 二维多项式求值 177

6.2.3 多项式乘法 179

6.2.4 多项式除法 181

6.3 随机数生成算法 183

6.3.1 Java语言中的随机方法 183

6.3.2 [0,1]之间均匀分布的随机数算法 185

6.3.3 产生任意范围的随机数 187

6.3.4 [m,n]之间均匀分布的随机整数算法 188

6.3.5 正态分布的随机数生成算法 189

6.4 复数运算 191

6.4.1 简单的复数运算 191

6.4.2 复数的幂运算 194

6.4.3 复指数运算 195

6.4.4 复对数运算 196

6.4.5 复正弦运算 198

6.4.6 复余弦运算 199

6.5 阶乘 200

6.5.1 使用循环来计算阶乘 200

6.5.2 使用递归来计算阶乘 201

6.6 计算π的近似值 202

6.6.1 割圆术 203

6.6.2 蒙特卡罗算法 206

6.6.3 级数公式 208

6.7 矩阵运算 210

6.7.1 矩阵加法 210

6.7.2 矩阵减法 211

6.7.3 矩阵乘法 213

6.8 方程求解 215

6.8.1 线性方程求解——高斯消元法 215

6.8.2 非线性方程求解——二分法 220

6.8.3 非线性方程求解——牛顿迭代法 222

6.9 小结 225

第7章 数据结构问题

7.1 动态数组排序 226

7.1.1 动态数组的存储和排序 226

7.1.2 动态数组排序实例 227

7.2 约瑟夫环 230

7.2.1 简单约瑟夫环算法 230

7.2.2 简单约瑟夫环求解 232

7.2.3 复杂约瑟夫环算法 233

7.2.4 复杂约瑟夫环求解 234

7.3 城市之间的短总距离 237

7.3.1 短总距离算法 237

7.3.2 短总距离求解 240

7.4 短路径 244

7.4.1 短路径算法 245

7.4.2 短路径求解 247

7.5 括号匹配 252

7.5.1 括号匹配算法 252

7.5.2 括号匹配求解 254

7.6 小结 257

第8章 数论问题

8.1 数论概述 258

8.1.1 数论概述 258

8.1.2 数论的分类 259

8.1.3 初等数论 260

8.1.4 本章用到的基本概念 260

8.2 完全数 261

8.2.1 什么是完全数 261

8.2.2 计算完全数算法 262

8.3 亲密数 264

8.3.1 什么是


【前言】

信息社会进入云计算时代,为明显的特征就是“各种云终端 云服务器应用的组合而成。不管是编写服务器端的程序,还是编写PC、平板电脑、手机等云终端上的应用程序,采用Java基本上都是常见的选择。而一个应用程序往往由编程语言、数据结构和算法组成。其中,算法是整个程序设计的核心。算法代表着求解具体问题的手段和方法,可以毫不夸张地说,算法是一切程序设计的灵魂和基础。选择合理的算法,可以起到事半功倍的效果。因此,对于程序员来说,学习和掌握算法成为重中之重。同时,各大公司招聘Java程序员时,除基本语法之外,算法的掌握程度也是考核的重点方面。

本书特色

为了保证读者掌握算法这个程序设计的核心技术,笔者一开始就为本书规划了一些特色,以保证它的质量和生命力。和其他书籍相比,本书有如下优点:

(1)本书由浅入深,循序渐进地带领读者逐步深入学习算法和数据结构的知识。

(2)本书在讲解每个知识点的同时,均给出了相应的算法原理、算法实现,同时还给出了完整的实例,每个实例都可以运行,使得读者可以快速掌握对应知识点如何应用在程序设计中。

(3)本书在介绍各个知识点的时候,尽量结合历史背景并给出了问题的完整分析,使读者可以了解问题的来龙去脉,避免了代码类书籍的枯燥乏味。

(4)本书对每一个实例的程序代码都进行了详细的注释和分析,并给出了运行结果,使得读者更加容易理解。

(5)本书中的所有代码均采用应用较为广泛的Java语言进行编写。但是这些算法本身并不仅局限于Java语言,读者如果采用C 、C、C#、VB等其他编程语言,只需按照对应的语法格式进行少量的修改即可使用。

本书的内容

本书以实用性、系统性、完整性和前沿性为重点,详细介绍了算法的基本思想和在不同领域的应用实例。本书分为三篇,共14章内容。

第1篇 算法基础篇:本篇共3章,详细介绍了算法和数据结构的相关知识。本篇内容中既有对算法的深入诠释,更有作者对算法基本思想的经验分享。读者可通过本篇内容细致有序地建立起对算法理解的知识性框架。

第2篇 算法应用篇:本篇共7章,详细讲解了算法在排序、查找、数学计算、数论、历史趣题和游戏中的应用。本篇可称为本书中的出彩部分,用实例嵌入知识讲解方式对各类算法进行了翔实地阐述;同时用一些贴近现实的生动实例对算法进行了有趣的表述,提升读者的编程能力和学习兴趣。

第3篇 算法面试篇:本篇共4章,详细讲解了常见面试中的算法。本篇中我们对面试题进行了细分,分别为上机类、逻辑推理类、教学能力类和基础-扩展算法面试类,通过对这些面试类试题的详细分析,拓展读者的思维,提升能力。

适合的读者

? 大专院校相关专业的学生及教师;

? 系统开发人员;

? 程序设计初学者;

? Java程序员;

? 计算机程序设计爱好者。

附书附赠光盘

本书光盘中包含两大部分,部分有:本书第14章的PDF电子档、书中源代码以及总计20讲的Java算法讲解视频,总时长约600分钟。第二部分则是一套电子书,以下是对这套电子书的详细说明。

算法是一个程序员成长的关键,但要完全掌握Java开发技能,还需要学习其他知识,本光盘是在纸质算法图书之外,额外提供一套“Java程序员成长之路”,希望以一本算法书 一张配套电子书光盘,形成一个Java学习的完整解决方案。为此,我们设计了一个大学生能成长为Java程序员需要的全部图书的电子版,从基础到开发参考全包含:

(1)《打通经脉——Java基础入门编程详解》

(2)《关键技术——JSP与JDBC应用详解》

(3)《独门架构——Java Web开发应用详解》

(4)《神兵利器——Eclipse开发技术详解》

(5)《开发参考——JSTL网络标签与SSH类参考手册》

本系列电子书针对的是想成为Java专业开发人员的读者(大学高年级和工作前3年的职场新人),给他们一揽子的解决方案,能够系统学习各个Java开发的知识和技能的方方面面。既能学会语言基础、面向对象这些基本内容,也能学到Spring、Struts、Hibernate这些真正Java开发人员必须掌握的高级开发框架技术方面的内容,目标是,学完全套图书的读者,能达到工作1-2年的Java程序员水平,覆盖大多数公司招聘Java程序员的技术要求范围。

本书由宁夏大学副教授宋娟编写,因时间仓促,不当之处,还请读者不吝指出,以期在以后的改版中进行改进。


【书摘与插画】

返回顶部