新書推薦:
《
绝美的奥伦堡蕾丝披肩编织
》
售價:HK$
181.7
《
狂飙年代:18世纪俄国的新文化和旧文化(第二卷)
》
售價:HK$
177.0
《
万有引力书系 纳粹亿万富翁 德国财富家族的黑暗历史
》
售價:HK$
112.7
《
中国常见植物野外识别手册:青海册
》
售價:HK$
78.2
《
三星堆对话古遗址(从三星堆出发,横跨黄河流域,长江流域,对话11处古遗址,探源多元一体的中华文明)
》
售價:HK$
89.7
《
迷人的化学(迷人的科学丛书)
》
售價:HK$
147.2
《
宋代冠服图志(详尽展示宋代各类冠服 精美插图 考据严谨 细节丰富)
》
售價:HK$
87.4
《
形似神异:什么是中日传统政治文化的结构性差异
》
售價:HK$
55.8
|
編輯推薦: |
精讲学习视频全程相伴,扫码即看;110个有趣实例及精彩分析娓娓道来
|
內容簡介: |
计算机技术的发展和普及改变了人们的生活和工作方式,也改变了人们的娱乐方式,其中尤为重要的是计算机编程技术。现代的设计任务大多通过代码编程完成,其中算法起到了至关重要的作用。可以毫不夸张地说,算法是一切程序设计的灵魂和基础。本书知识点覆盖全面、结构安排紧凑、讲解详细、示例丰富。全书对每一个知识点都给出了相应的算法及应用示例(重点章节同时在文中相应位置给出了即扫即看的视频二维码)。虽然这些示例都是以C语言编写的,但是算法并不仅仅局限于C语言。如果读者采用其他编程语言,如C、C#、VB、Java等,根据其语法格式进行适当的修改也可使用。随书附赠的二维码下载包中包含45讲、超过10小时的CC算法讲解视频,让读者所获更超值。
|
關於作者: |
陈黎娟:目前就职于美国胜利通讯北京分公司,职位为Senior Firmware Engineer(高级固件工程师)。先后在SunPlus,SST等公司担任工程师和高级架构工程师。在嵌入式系统、嵌入式接口和底层固件开发方面积累了丰富的经验。
|
目錄:
|
第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 章 数据结构
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 章 基本算法思想
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章 排序算法
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 章 查找算法
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
|
內容試閱:
|
计算机程序设计是信息化进程中最为重要的一个设计手段。一个应用程序往往由编程语
言、数据结构和算法组成。其中,算法是整个程序设计的核心。算法代表求解具体问题的手
段和方法,可以毫不夸张地说,算法是一切程序设计的灵魂和基础。选择合理的算法,可以
产生事半功倍的效果。因此,对于程序员来说,学习和掌握算法是重中之重。
但是,数据结构和算法理论性很强,读者在学习的过程中会感到很枯燥和吃力,往往学习
一段时间后便丧失了兴趣,这就使得学习的效率大大降低。如何才能提高读者的学习兴趣,使
读者能够快速掌握数据结构和算法的知识呢?其实读者需要的不仅是理论知识,还需要了解这
些知识点的代码实现以及应用示例。另外,对知识背景的介绍和理解往往能激发读者学习的兴
趣。编者从这些基本点出发,为读者编写了一本可以轻松学习数据结构和算法的参考书。
CC 是目前最为流行的编程语言之一。本书中所有的算法及示例都是采用C 语言进行
编写的,因为基本语法相同,所以同时也能在C 环境下运行。但是这些算法并不仅仅局限
于C 语言。如果读者采用其他编程语言,如C#、VB、Java 等,根据其语法格式进行适当的
修改也可使用,毕竟算法是核心。CC 语言是众多编程语言发展的重要参考,很多语法特
点也相同。
■ 本书的特色
为了保证读者掌握算法程序设计的核心技术,一开始我们就为本书规划了一些特色,以
保证质量和延长生命力。与其他同类书籍相比,本书有如下特色:
? 本书由浅入深、循序渐进地带领读者学习数据结构和算法的知识。
? 本书不仅详细介绍了算法的基础知识和应用,还对常用的加密 解密和数据压缩等
高级算法编程技术进行了详细地讲解。
? 本书在讲解每个知识点的同时,均给出了相应的算法原理和算法实现,同时还给出
了完整的应用示例,每个示例都可以通过编译执行,使读者可以快速掌握相应的知识点在程
序设计中的应用。
? 本书在介绍各个知识点的同时,尽量结合历史背景并给出问题的完整分析,使读者
可以了解问题的来龙去脉,避免了代码类书籍的枯燥乏味,增强了图书的易读性。
? 本书对每一个示例的程序代码都进行了详细的注释和分析,并给出了运行结果,使
读者在学习时更容易理解。
■ 改版说明
本次改版,考虑到进入具体的算法之前,读者应该更多了解各种算法策略,我们完善丰
FOREWORD 前 言
I
文前.indd 1 2019-9-11 16:53:27
II
? CC常用算法手册
富了第3 章基本算法思想;同时,根据读者的反馈和需要,调整增加了算法面试部分的内容,
让这部分内容逻辑更加清晰,针对性更强。另外,我们校正修订了全书代码。
因为篇幅的问题,我们把不太重要的一些章节,改为放到网上供读者阅读,以降低图书售
价,减少读者的负担。比如部分数值算法,并不是每一个读者,对这些内容,都有很强的需求。
这次改版之后,本书的可读性增加了,针对性更强,降低了起点难度,个别优秀的中学生,
也能在算法的学习和竞赛中参考本书。
■ 本书结构
本书以实用性、系统性、完整性和前沿性为特点,详细介绍了算法的基本思想和不同领
域的应用示例。本书内容共分3 篇14 章。
第1 篇是算法基础篇,共分为3 章,详细介绍了算法和数据结构的相关知识。
第2 篇为算法应用篇,共分为7 章,详细讲解了算法在排序、查找、数值计算、数论、
经典趣题和游戏中的应用。
第3 篇为算法面试题篇,共分为4 章,详细分析了近几年各大IT 公司在逻辑推理测试、
数学基础测试、算法及数据结构方面的常见面试题。
■ 适合的读者
? 系统开发人员;
? C 语言程序员;
? 计算机培训班学员;
? 大学、大专等相关专业的学生及教师。
■ 即扫即看视频
我们从录制的讲解视频中精心挑选了38 段,根据本书讲解内容的重点程度,将每段视
频设置了即扫即看的二维码,然后嵌入相对应的章节中。读者在学习本书时,如果遇到理解
困难,便可直接扫码观看详细的视频讲解。
■ 附赠整体扫码下载包
在本次改版过程中,为了让图书达到更优性价比,在勘误书中错误的同时,我们增加一
个扫码下载包,其中包含以下内容:
? 45 讲、超过10 小时的精彩讲解视频,精练地分析了CC 算法的基本理论和在实
践中的应用;
? 电子文档(算法在密码学和数据压缩 解压缩中的应用);
? 本书中所有程序示例的源代码。
■ 致谢、勘误与支持
一本真正的好书,从策划到出版面市会凝聚很多人行之有效的想法及智慧,它不仅为读
者打开一扇学习知识的门,更为读者在书本之外搭建起一条提升能力的阶梯。感谢嵌入式开
发工程师陈黎娟女士为本书检查代码做出勘误修订。感谢河北大学刘帅奇老师的修订。为了
让本书更加完善,读者在学习本书的过程中如果发现有不明白的地方或者有更好的算法和其
他建议,欢迎您发送邮件到1057762679@qq.com 邮箱和我们交流。
|
|