书籍 C/C++常用算法手册  第4版的封面

C/C++常用算法手册 第4版PDF电子书下载

陈黎娟编著

购买点数

20

出版社

出版时间

2019

ISBN

标注页数

0 页

PDF页数

378 页

图书目录

第1章 算法概述 1

1.1 什么是算法 1

1.2 算法的发展历史和分类 2

1.3 算法与相关概念的区别 3

1.3.1 算法和公式的关系 4

1.3.2 算法与程序的关系 4

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

1.4 算法是计算机科学的灵魂 5

1.5 算法的表示 6

1.5.1 自然语言表示 6

1.5.2 流程图表示 6

1.5.3 N-S图表示 8

1.5.4 伪代码表示 8

1.6 伪代码与算法程序的对应 9

1.6.1 基本对应规则 9

1.6.2 分支结构 10

1.6.3 循环结构 10

1.6.4 数组及函数 11

1.7 算法的性能评价 11

1.8 算法实例 12

1.8.1 查找数字 12

实例1-1:在拥有20个整数数据的数组中查找某个数据 13

1.8.2 创建项目 14

1.8.3 编译执行 15

1.9 算法的新进展 16

1.10 小结:算法是程序设计的灵魂和基础 17

第2章 数据结构 18

2.1 数据结构概述 18

2.1.1 什么是数据结构 18

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

2.1.3 数据结构的内容 19

2.1.4 数据结构的分类 21

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

2.1.6 数据类型 22

2.1.7 常用的数据结构 23

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

2.2 线性表 24

2.2.1 什么是线性表 24

2.2.2 线性表的基本运算 25

2.3 顺序表结构 26

2.3.1 准备数据 26

2.3.2 初始化顺序表 27

2.3.3 计算顺序表长度 27

2.3.4 插入结点 27

2.3.5 追加结点 28

2.3.6 删除结点 28

2.3.7 查找结点 29

2.3.8 显示所有结点 29

2.3.9 顺序表操作示例 30

实例2-1:对某班级学生学号、姓名和年龄数据进行顺序表操作 30

2.4 链表结构 33

2.4.1 什么是链表结构 33

2.4.2 准备数据 34

2.4.3 追加结点 34

2.4.4 插入头结点 35

2.4.5 查找结点 36

2.4.6 插入结点 37

2.4.7 删除结点 38

2.4.8 计算链表长度 38

2.4.9 显示所有结点 39

2.4.10 链表操作示例 39

实例2-2:使用链表操作实现用户管理 39

2.5 栈结构 43

2.5.1 什么是栈结构 43

2.5.2 准备数据 44

2.5.3 初始化栈结构 44

2.5.4 判断空栈 45

2.5.5 判断满栈 45

2.5.6 清空栈 45

2.5.7 释放空间 46

2.5.8 入栈 46

2.5.9 出栈 46

2.5.10 读结点数据 47

2.5.11 栈结构操作示例 47

实例2-3:使用栈结构实现学生数据操作 47

2.6 队列结构 50

2.6.1 什么是队列结构 50

2.6.2 准备数据 50

2.6.3 初始化队列结构 51

2.6.4 判断空队列 51

2.6.5 判断满队列 52

2.6.6 清空队列 52

2.6.7 释放空间 52

2.6.8 入队列 52

2.6.9 出队列 53

2.6.10 读结点数据 53

2.6.11 计算队列长度 54

2.6.12 队列结构操作示例 54

实例2-4:使用队列结构实现学生数据操作 54

2.7 树结构 57

2.7.1 什么是树结构 57

2.7.2 树的基本概念 58

2.7.3 二叉树 58

2.7.4 准备数据 62

2.7.5 初始化二叉树 62

2.7.6 添加结点 63

2.7.7 查找结点 64

2.7.8 获取左子树 65

2.7.9 获取右子树 65

2.7.10 判断空树 65

2.7.11 计算二叉树深度 66

2.7.12 清空二叉树 66

2.7.13 显示结点数据 66

2.7.14 遍历二叉树 67

2.7.15 树结构操作示例 69

实例2-5:经典二叉树的遍历(4种遍历方式) 69

2.8 图结构 71

2.8.1 什么是图结构 71

2.8.2 图的基本概念 72

2.8.3 准备数据 76

2.8.4 创建图 78

2.8.5 清空图 78

2.8.6 显示图 79

2.8.7 遍历图 79

2.8.8 图结构操作示例 80

实例2-6:使用深度优先遍历算法遍历图操作程序 81

2.9 小结:数据结构+算法=程序 83

第3章 基本算法思想 84

3.1 常用算法思想概述 84

3.2 穷举算法思想 84

3.2.1 穷举算法基本思想 85

3.2.2 穷举算法示例 85

实例3-1:鸡兔同笼问题 85

3.3 递推算法思想 87

3.3.1 递推算法基本思想 87

3.3.2 递推算法示例 87

实例3-2:兔子产仔问题 87

3.4 递归算法思想 89

3.4.1 递归算法基本思想 89

3.4.2 递归算法示例 90

实例3-3:求数字12的阶乘 90

3.5 分治算法思想 91

3.5.1 分治算法基本思想 91

3.5.2 分治算法示例 91

实例3-4:从30枚银币中找出仅有的1枚假银币 91

3.6 概率算法思想 95

3.6.1 概率算法基本思想 95

3.6.2 概率算法示例 95

实例3-5:利用蒙特卡罗算法计算圆周率π 95

3.7 贪心算法思想 97

3.7.1 贪心算法基本思想 97

3.7.2 贪心算法示例 98

实例3-6:利用贪心算法思想兑换硬币 98

3.8 小结:思路决定出路 99

第4章 排序算法 100

4.1 排序算法概述 100

4.2 冒泡排序法 101

4.2.1 冒泡排序算法 101

4.2.2 冒泡排序算法示例 102

实例4-1:对包含10个数字的整型数组进行排序 102

4.3 选择排序法 104

4.3.1 选择排序算法 104

4.3.2 选择排序算法示例 105

实例4-2:对包含10个数字的整型数组进行排序 105

4.4 插入排序法 106

4.4.1 插入排序算法 107

4.4.2 插入排序算法示例 108

实例4-3:对包含10个数字的整型数组进行排序 108

4.5 Shell排序法 109

4.5.1 Shell排序算法 109

4.5.2 Shell排序算法示例 111

实例4-4:对包含10个数字的整型数组进行排序 111

4.6 快速排序法 112

4.6.1 快速排序算法 112

4.6.2 快速排序算法示例 114

实例4-5:对包含18个数字的整型数组进行排序 114

4.7 堆排序法 116

4.7.1 堆排序算法 116

4.7.2 堆排序算法示例 120

实例4-6:对包含10个数字的整型数组进行排序 120

4.8 合并排序法 122

4.8.1 合并排序算法 122

4.8.2 合并排序算法示例 125

实例4-7:对包含15个数字的整型数组进行排序 125

4.9 排序算法的效率 128

4.10 排序算法的其他应用 128

4.10.1 反序排序 129

4.10.2 反序插入排序算法示例 129

实例4-8:对包含10个数字的整型数组进行排序 129

4.10.3 字符串的排序 131

4.10.4 字符串排序示例 132

实例4-9:用快速排序算法对包含16个字母的字符串进行排序 132

4.10.5 字符串数组的排序 133

4.10.6 字符串数组排序示例 134

实例4-10:用快速排序算法对包含5个单词的字符串数组进行排序 134

4.11 小结:排序是最基本的算法 136

第5章 查找算法 137

5.1 查找算法概述 137

5.2 顺序查找 138

5.2.1 顺序查找算法 138

5.2.2 顺序查找操作示例 138

实例5-1:在包含15个数字的数组中查找第7个数字 138

5.3 折半查找 140

5.3.1 折半查找算法 140

5.3.2 折半查找操作示例 142

实例5-2:在包含15个数字的数组中查找第11个数字 142

5.4 小结:查找是最基本的应用 144

第6章 基本数学问题 145

6.1 判断闰年 145

实例6-1:判断2000年到3000年之间所有的闰年 145

6.2 多项式计算 146

6.2.1 一维多项式求值 147

6.2.2 一维多项式求值示例 147

实例6-2:计算多项式在x取不同值时的值 147

6.2.3 二维多项式求值 148

6.2.4 二维多项式求值示例 149

实例6-3:求4×5的二维多项式在给定处的值 149

6.2.5 多项式乘法 150

6.2.6 多项式乘法示例 151

实例6-4:计算两个多项式的乘积多项式 151

6.2.7 多项式除法 152

6.2.8 多项式除法示例 153

实例6-5:计算A(x)/B(x)的商多项式和余多项式 153

6.3 随机数生成 154

6.3.1 C语言中的随机函数 155

实例6-6:在0~32767产生一组随机数 155

实例6-7:输出0~100的随机整数 155

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

实例6-8:输出10个0~1的随机数 157

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

实例6-9:输出10个10.0~20.0的浮点随机数 158

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

实例6-10:输出10个100~200的随机整数 159

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

实例6-11:输出10个正态分布的随机数 160

6.4 复数运算 162

6.4.1 简单的复数运算 162

6.4.2 简单复数运算示例 163

实例6-12:计算两个复数的加减乘除 163

6.4.3 复数的幂运算 164

6.4.4 复数的幂运算示例 165

实例6-13:一个复数的n(n=5)次幂运算 165

6.4.5 复指数运算 166

6.4.6 复指数运算示例 166

实例6-14:一个复数的复指数运算 166

6.4.7 复对数运算 167

6.4.8 复对数运算示例 167

实例6-15:一个复数的复对数计算 167

6.4.9 复正弦运算 168

6.4.10 复正弦运算示例 169

实例6-16:一个复数的复正弦运算 169

6.4.11 复余弦运算 169

6.4.12 复余弦运算示例 170

实例6-17:一个复数的复余弦运算 170

6.5 阶乘 170

6.5.1 使用循环计算阶乘 171

6.5.2 循环计算阶乘示例 171

实例6-18:求输入整数的阶乘运算结果 171

6.6 计算π的近似值 172

6.6.1 割圆术 172

6.6.2 割圆术算法示例 174

实例6-19:用割圆术计算圆周率π(根据输入的切割次数) 174

6.6.3 级数公式 175

6.6.4 级数公式算法示例 176

实例6-20:用级数公式的算法计算圆周率π 176

6.7 矩阵运算 177

6.7.1 矩阵加法 177

6.7.2 矩阵加法示例 178

实例6-21:计算两个矩阵相加的结果 178

6.7.3 矩阵减法 179

6.7.4 矩阵减法示例 179

实例6-22:计算两个矩阵相减 179

6.7.5 矩阵乘法 180

6.7.6 矩阵乘法示例 181

实例6-23:计算两个矩阵相乘的结果 181

6.8 方程求解 182

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

6.8.2 高斯消元法示例 185

实例6-24:3个变量、3个方程的方程组的高斯消元法求解 186

6.8.3 非线性方程求解——二分法 187

6.8.4 二分法算法示例 188

实例6-25:使用二分法来求方程的解 188

6.8.5 非线性方程求解——牛顿迭代法 189

6.8.6 牛顿迭代法示例 190

实例6-26:使用牛顿迭代法求方程的解 191

6.9 开平方 192

6.9.1 开平方算法 192

6.9.2 开平方示例 193

实例6-27:求解两个数字开方的数值计算结果 193

6.10 小结:算法归根结底都是数学问题 194

第7章 游戏中的经典计算 195

7.1 扑克游戏问题——10点半 195

7.1.1 算法解析 195

7.1.2 求解示例 199

7.2 生命游戏 201

7.2.1 生命游戏的原理 201

7.2.2 算法解析 203

7.2.3 求解示例 204

7.3 小结:好算法好游戏 208

第8章 经典数据结构问题 209

8.1 动态数组排序 209

8.1.1 动态数组的存储和排序算法 209

8.1.2 动态数组排序示例 210

实例8-1:对以0结束的动态字符数组进行排序 210

8.2 约瑟夫环 212

8.2.1 约瑟夫环算法解析 212

8.2.2 约瑟夫环应用 213

实例8-2:总数为41人,报数3者自杀,求解约瑟夫环的解 213

8.2.3 约瑟夫环推广应用算法 215

8.2.4 约瑟夫环推广应用 216

实例8-3:n个人环坐(顺时针编号1、2、3…、n),每人随机取一张写有数字的纸条,报数m者出列,同时其手中数字为新的出列数字,求解约瑟夫环 216

8.3 城市之间的最短总距离和最短距离 218

8.3.1 最短总距离算法 219

8.3.2 最短路径算法 221

8.3.3 最短总距离求解示例 223

实例8-4:计算某地区5个城市间的最短总距离 223

8.4 解决括号匹配问题 227

8.4.1 括号匹配算法 227

8.4.2 括号匹配求解示例 229

实例8-5:对以0结束的一组括号进行匹配 229

8.5 小结:合理的数据结构=高效率的算法 232

第9章 数论问题 233

9.1 数论概述及分类 233

9.1.1 数论概述 233

9.1.2 数论的分类 234

9.1.3 基本概念 235

9.2 完全数 236

9.2.1 完全数概述 236

9.2.2 生成完全数算法 237

9.2.3 查找完全数算法示例 238

实例9-1:查找10000以内的所有完全数 238

9.3 亲密数(对) 239

9.3.1 亲密数(对)概述 239

9.3.2 查找亲密数对算法 239

9.3.3 查找亲密数对算法示例 240

实例9-2:查找5000以内的所有亲密数对 240

9.4 水仙花数 242

9.4.1 水仙花数概述 242

9.4.2 查找水仙花数算法 243

9.4.3 查找水仙花数算法示例 243

实例9-3:查找3位数和4位数的水仙花数 243

9.5 自守数 245

9.5.1 自守数概述 245

9.5.2 查找自守数算法 246

9.5.3 查找自守数算法示例 247

实例9-4:请用两种算法查找1000以内和200000以内的自守数 247

9.6 最大公约数和最小公倍数 249

9.6.1 计算最大公约数算法——辗转相除法 249

9.6.2 计算最大公约数算法——Stein算法 250

9.6.3 计算最小公倍数算法——lcm算法 251

9.6.4 计算最大公约数示例 251

实例9-5:用辗转相除法计算12和34的最大公约数 252

9.6.5 计算最小公倍数示例 252

实例9-6:求12和34的最小公倍数 252

9.7 素数 254

9.7.1 素数概述 254

9.7.2 查找判断素数算法 254

9.7.3 查找判断素数算法示例 255

实例9-7:查找判断1~1000的所有素数 255

9.8 回文素数 256

9.8.1 回文素数概述 256

9.8.2 查找判断回文素数算法 256

9.8.3 查找判断回文素数算法示例 257

实例9-8:查找判断0~50000的回文素数 257

9.9 平方回文数 259

9.9.1 平方回文数概述 259

9.9.2 查找判断平方回文数算法 259

9.9.3 查找判断平方回文数算法示例 260

实例9-9:判断查找1~1000哪些数的平方可以得到回文数 260

9.10 分解质因数 261

9.10.1 质因数分解算法 261

9.10.2 质因数分解算法示例 262

实例9-10:对合数1155分解质因数 262

9.11 小结:数论是算法最好的练兵场 263

第10章 经典趣题计算机算法求解 264

10.1 不定方程问题:百钱买百鸡 264

10.2 不定方程问题:五家共井 266

10.3 递归算法问题:猴子吃桃 269

10.4 级数求和问题:舍罕王赏麦 270

10.5 递归算法问题:汉诺塔 272

10.6 关于最优化的问题:窃贼问题 275

10.7 递归算法问题:马踏棋盘 280

10.8 回溯算法问题:八皇后问题 283

10.9 递归算法问题:青蛙过河 286

10.10 最优化算法:三色旗 290

10.11 递推算法问题:渔夫捕鱼 293

10.12 数论问题:爱因斯坦的阶梯 295

10.13 让算法决定输赢:常胜将军 297

10.14 排列组合问题:三色球 299

10.15 小结:算法融入有趣实践 301

第11章 数学能力测试 302

11.1 最后有哪些灯是亮着的 302

11.2 用一笔画出经过9个点的4条直线 303

11.3 在9个点上画10条线 304

11.4 时、分和秒针重合问题 304

11.5 可以喝多少瓶汽水 307

11.6 怎样拿到第100号球 308

11.7 烧绳计时 309

11.8 分裂的小虫 310

11.9 看起来像相遇问题 310

11.10 数学家的约会妙招 311

第12章 智商逻辑推理类面试题 313

12.1 脑筋急转弯 313

12.1.1 中国有多少辆汽车 313

12.1.2 下水道的盖子为什么是圆形的 314

12.1.3 分蛋糕 315

12.1.4 你怎样改造和重新设计一个ATM银行自动取款机 315

12.2 逻辑推理 316

12.2.1 哪个开关控制哪盏灯 316

12.2.2 谁先猜出自己帽子的颜色 317

12.2.3 海盗分金 318

12.2.4 罪犯认罪 319

12.2.5 找出质量不相同的那个球 320

12.2.6 有多少人及格 320

12.2.7 他说的是真话吗 321

12.3 计算推理 322

12.3.1 倒水问题 322

12.3.2 骗子购物 323

12.3.3 求最大的连续组合值(华为校园招聘笔试题) 324

12.3.4 巧妙过桥 325

12.3.5 字符移动(金山笔试题) 327

第13章 数据结构常见面试题及解答 329

13.1 基本数据结构面试题 329

13.1.1 如何实现数据缓存区 329

13.1.2 出栈队列 329

13.1.3 入栈队列 330

13.1.4 二叉树叶结点个数 331

13.1.5 有向图和无向图 332

13.2 数据结构应用面试题 332

13.2.1 设计包含min函数的栈 332

实例13-1:在函数min、push及pop时间复杂度都是O(1)的情况下,设计包含min函数的栈 333

13.2.2 设计计算指定结点层数算法 335

实例13-2:在给定的二叉树中,计算字符C的层数 336

13.2.3 链表法筛选成绩 337

实例13-3:某班级8位学生的成绩已给出,使用链表结构及指针操作来输出及格的成绩分数 337

13.2.4 将二叉树转变成排序的双向链表 339

实例13-4:将给出的二叉树转换成一个排序的双向链表(不能创建新的结点,只调整数指针的方向) 339

13.2.5 单链表逆转 340

实例13-5:编写算法将一个单链表实现逆转 341

第14章 算法常见面试题及解答 343

14.1 排序类算法面试题 343

14.1.1 排序算法效率 343

14.1.2 鸡尾酒排序算法 344

实例14-1:用鸡尾酒排序算法对一组整数进行排序 344

14.1.3 文件排序 345

14.1.4 城市名称 347

实例14-2:对任意输入的5个城市的拼音按照字母顺序重新排列输出 347

14.2 查找类算法面试题 348

14.2.1 递归求极值 348

实例14-3:用递归法求10个整数中的最大值 348

14.2.2 寻找共同元素 349

实例14-4:查找并输出两个整型数组中同时出现的元素 350

14.2.3 查找最大子串 351

实例14-5:在一个由0和1组成的字符串中,查找0和1连续出现的最大次数 351

14.3 综合类算法面试题 352

14.3.1 求序列和 353

实例14-6:求给出数据序列的前100项之和 353

14.3.2 递归求累加和 353

实例14-7:用递归算法求1+2+3+4+……+100之和 354

14.3.3 猜苹果数 354

实例14-8:用递归算法计算给定题目中5个人各自拥有的苹果数 355

14.3.4 逆置字符串 356

实例14-9:将一个输入的字符串在不额外开辟空间的情况下进行逆置 356

14.3.5 位运算求负数 357

实例14-10:计算正整数20对应的负数(只可使用位运算实现) 357

查看更多关于的内容

出版社其它书籍
本类热门
在线购买PDF电子书
下载此书RAR压缩包