具体描述
本书分为上、下两篇,共10章。上篇用5章的篇幅介绍了算法和数据结构的基础知识,包括基础算法思想、简单数据结构、复杂数据结构、排序和查找算法等内容;下篇用5章的篇幅介绍了用数据结构解决实际问题的相关程序,包括解决数学问题、数据结构问题、算法经典问题等内容以及信息学奥赛部分试题的程序,最后一章介绍了与算法和数据结构相关的常见面试题。本书案例实用性强、结构清晰、实例代码讲解详尽,可作为大中专院校学生学习数据结构以及做课程设计的参考书,也可以作为有一定程序设计基础的程序员的参考书,还可作为参加信息学奥赛选手的参考书。
作者简介
目录信息
上篇 算法与数据结构基础
第1章 基础算法思想
1.1 编程的灵魂:数据结构+算法
1.2 算法的作用:猜价格游戏
1.2.1 算法的作用
1.2.2 实例:看商品猜价格
1.3 枚举(穷举)算法思想
1.3.1 算法思路
1.3.2 实例:填数游戏
1.3.3 实例:填运算符
1.4 递推算法思想
1.4.1 算法思路
1.4.2 顺推实例:斐波那契数列
1.4.3 逆推实例:该存多少钱
1.5 递归算法思想
1.5.1 算法思路
1.5.2 实例:求阶乘
1.5.3 实例:数制转换
1.6 分治算法思想
1.6.1 算法思路
1.6.2 实例:乒乓球比赛日程安排
1.7 贪婪算法思想
1.7.1 算法思路
1.7.2 实例:换零钱
1.8 试探法算法思想
1.8.1 算法思路
1.8.2 实例:生成彩票号码组合
1.9 模拟算法
1.9.1 算法思路
1.9.2 实例:猜数游戏
1.9.3 实例:模拟掷骰子游戏
1.10 算法的评价
1.10.1 算法评价原则
1.10.2 算法的效率
1.11 上机实践
第2章 简单数据结构
2.1 最简单的结构:线性表
2.1.1 线性表的概念
2.1.2 操作顺序表
2.1.3 操作链表
2.1.4 实例:用链表制作通讯录
2.2 后进先出结构:栈
2.2.1 栈的概念
2.2.2 操作栈
2.2.3 实例:算术表达式求值
2.3 先进先出结构:队列
2.3.1 什么是队列
2.3.2 操作队列
2.3.3 循环队列的操作
2.3.4 实例:银行排号程序
2.4 上机实践
第3章 复杂数据结构
3.1 层次关系结构:树
3.1.1 树的概念
3.1.2 二叉树的概念
3.1.3 二叉树的存储
3.1.4 操作二叉树
3.1.5 遍历二叉树
3.1.6 测试二叉树
3.1.7 线索二叉树
3.1.8 最优二叉树(赫夫曼树)
3.2 网状关系:图
3.2.1 图的定义和基本术语
3.2.2 图的存储
3.2.3 图的创建
3.2.4 图的遍历
3.2.5 最小生成树
3.2.6 最短路径
3.3 上机实践
第4章 常用算法——排序
4.1 排序概述
4.1.1 排序算法分类
4.1.2 数据准备
4.2 冒泡排序法
4.2.1 冒泡排序法概述
4.2.2 改进的冒泡排序法
4.3 快速排序法
4.3.1 算法描述
4.3.2 算法实现
4.4 简单选择排序法
4.5 堆排序法
4.5.1 算法描述
4.5.2 算法实现
4.6 直接插入排序法
4.6.1 算法描述
4.6.2 算法实现
4.7 希尔(Shell)排序法
4.7.1 算法描述
4.7.2 算法实现
4.8 合并排序法
4.8.1 算法描述
4.8.2 算法实现
4.9 排序算法的选择
4.9.1 选择基准
4.9.2 各种排序算法的优缺点
4.10 上机实践
第5章 常用算法——查找
5.1 查找的基本概念
5.2 简单查找
5.2.1 顺序查找
5.2.2 折半查找
5.3 二叉排序树
5.3.1 二叉排序树的定义
5.3.2 插入节点
5.3.3 查找节点
5.3.4 删除节点
5.4 索引查找
5.4.1 索引的概念
5.4.2 索引查找算法
5.5 散列表
5.5.1 散列表概述
5.5.2 构造散列函数
5.5.3 处理冲突
5.5.4 创建和查找散列表
5.6 上机实践
下篇 用数据结构解决实际问题
第6章 数学问题
6.1 有趣的整数
6.1.1 完数
6.1.2 亲密数
6.1.3 水仙花数
6.1.4 自守数
6.1.5 最大公约数和最小公倍数
6.2 素数
6.2.1 求素数
6.2.2 回文数
6.2.3 哥德巴赫猜想
6.3 阶乘
6.3.1 用递归计算阶乘
6.3.2 大数阶乘
6.4 求π的近似值
6.4.1 概率法
6.4.2 割圆法
6.4.3 公式法
6.4.4 计算任意位数的π
6.5 方程求解
6.5.1 高斯消元法解线性方程组
6.5.2 二分法解非线性方程
6.5.3 牛顿迭代法解非线性方程
6.6 矩阵的运算
6.6.1 矩阵加法和乘法运算
6.6.2 多维矩阵转一维矩阵
6.6.3 逆矩阵
6.6.4 稀疏矩阵
6.7 一元多项式的运算
6.7.1 多项式加法
6.7.2 多项式减法
6.8 上机实践
第7章 数据结构问题
7.1 约瑟夫环
7.2 大整数四则运算
7.2.1 使用数组进行大整数运算
7.2.2 使用链表进行大整数运算
7.3 进制转换
7.3.1 进制转换的分析
7.3.2 进制转换实现代码
7.4 括号匹配
7.5 中序式转后序式
7.5.1 后序表达式
7.5.2 算法实现
7.5.3 后序表达式求值
7.6 停车场管理
7.6.1 问题分析
7.6.2 算法实现
7.7 迷宫求解
7.7.1 迷宫问题
7.7.2 算法实现
7.7.3 求迷宫所有路径
7.8 LZW压缩的实现
7.8.1 LZW的相关概念
7.8.2 LZW压缩过程
7.8.3 LZW压缩的实现
7.8.4 LZW解压缩过程
7.8.5 解压缩函数
7.8.6 集成压缩和解压缩功能
7.9 上机实践
第8章 算法经典问题
8.1 不定方程问题
8.1.1 百钱买百鸡
8.1.2 存钱利息最大化
8.1.3 求阶梯数
8.1.4 五家共井
8.1.5 鸡兔同笼
8.2 推算问题
8.2.1 猴子吃桃
8.2.2 舍罕王的赏赐
8.3 魔术方阵
8.3.1 简捷连续填数法
8.3.2 双向翻转法
8.3.3 井字调整法
8.4 智力趣题
8.4.1 汉诺塔
8.4.2 背包问题
8.4.3 马踏棋盘
8.4.4 八皇后问题
8.4.5 青蛙过河
8.4.6 三色旗
8.5 趣味游戏
8.5.1 取石子游戏
8.5.2 生命游戏
8.5.3 洗扑克牌
8.5.4 黑白棋
8.5.5 凑24点游戏
8.5.6 10点半游戏
8.6 上机实践
第9章 信息学奥赛试题精解
9.1 NOIP普及组试题精解
9.1.1 求级数之和
9.1.2 求素数组合
9.1.3 计算卒的路线
9.1.4 检查校验码
9.1.5 排座位
9.1.6 击鼓传花
9.1.7 绘制模拟立体图
9.1.8 公路上的树
9.1.9 采药
9.1.10 求等价表达式
9.1.11 不开心的龙龙
9.1.12 孙悟空摘桃
9.1.13 FBI树
9.1.14 外星人的语言
9.2 NOIP提高组试题精解
9.2.1 砝码称重
9.2.2 阿明的零花钱
9.2.3 购买年货
9.2.4 调整队形
9.2.5 均分纸牌
9.2.6 最小矩形面积
9.2.7 低价买股票
9.2.8 数字金字塔
9.2.9 方格取数
9.2.10 导弹防御系统
9.3 上机实践
第10章 常见面试题及解答
10.1 数据结构类面试题
10.1.1 选择题
10.1.2 编程题
10.2 经典算法类面试题
附录 Dev-C++开发环境的使用
· · · · · · (收起)
读后感
用户评价
**不止步于理论,深刻理解与实践并重的学习体验** 《零基础学算法 第3版》最让我赞叹的一点在于,它并没有仅仅停留在算法理论的层面,而是高度重视理论与实践的结合。书中每一个算法的讲解之后,都配有相应的代码实现和例题。这些例题并非简单重复,而是设计得各有侧重,能够帮助读者在实际操作中巩固所学知识,并发现理解上的盲点。我过去学习编程的经历中,常常是“看懂了”和“写出来”之间存在巨大的鸿沟。这本书的例题设计,恰好将这两者紧密地联系起来。它鼓励我去动手敲代码,去调试,去思考不同输入下的结果。当我遇到问题时,书中的讲解也足够详尽,能够帮助我定位错误并找到解决办法。更重要的是,作者在讲解过程中,会反复强调算法的时间复杂度和空间复杂度分析,并给出相应的计算方法。这对于我这样初学者来说,不仅是学习如何实现算法,更是学习如何评价一个算法的优劣,如何选择更高效的解决方案。这种深度和广度的结合,让我在学习算法的过程中,不仅仅是记忆几个排序方法,而是真正地理解了算法的设计思想和优化思路。这本书让我明白,学习算法不仅仅是掌握一套技能,更是一种解决问题的思维方式的培养。我享受这种不断尝试、不断进步的学习过程,而这本书就是我最得力的助手。
**视角独特,打破传统思维模式的“惊喜”** 《零基础学算法 第3版》给我带来的不仅仅是知识的积累,更是一种思维的启迪。在讲解一些经典算法时,作者并没有完全拘泥于教材中常见的解释方式,而是常常会从一个更具创新性的角度来阐述。这种独特的视角,常常能够让我眼前一亮,甚至颠覆了我对某些算法的固有认知。例如,在讲解动态规划时,作者并非一开始就抛出“最优子结构”和“重叠子问题”这些理论概念,而是通过一些引人入胜的生活化场景,引导读者逐步思考如何将一个大问题分解成相互关联的小问题,并发现其中的规律。这种“由表及里”的讲解方式,比直接灌输理论知识要有效得多,也更容易让人产生共鸣。书中还穿插了一些关于算法在实际应用中的案例,这些案例的选取非常贴切,能够让我看到算法的价值和力量,激发我对算法学习的更大热情。读完这本书,我感觉自己不仅仅是学到了算法的知识,更是学会了一种看待和解决问题的独特方式。它鼓励我跳出固有的思维模式,去寻找更简洁、更高效的解决方案。这种思维上的提升,对我未来的学习和工作都将产生深远的影响。
**代码注释清晰,学习过程中的“神助攻”** 在阅读《零基础学算法 第3版》的过程中,我最大的感受之一就是书中代码的质量。每一段代码都经过精心设计,不仅逻辑清晰,而且附带了非常详细和易懂的注释。这对于我这样需要借助注释来理解代码的初学者来说,简直是“神助攻”。很多时候,当我看到一段陌生的代码时,都会感到头疼,不知道从何下手。但是,这本书中的代码注释,就像一个耐心的老师,一步步地解释着每一行代码的作用,每一个变量的意义,每一个逻辑分支的判断。甚至,在一些关键的算法步骤,作者还会用注释来解释为什么需要这样做,背后的原理是什么。这种细致入微的注释,极大地降低了我的学习门槛,让我能够更专注于理解算法本身,而不是纠结于代码的语法细节。此外,书中的代码示例也使用了相对比较现代和易于理解的编程风格,这对于我以后进一步学习更复杂的项目也很有帮助。我曾经尝试过阅读一些网上开源的算法代码,但由于注释的缺乏或过于专业,常常让我难以消化。而《零基础学算法 第3版》在这方面做得非常出色,它真正做到了“零基础”,让每一个读者都能无障碍地进入算法的世界。
**初学者友好的里程碑之作,让我对编程世界有了全新的认识** 作为一名对编程有着浓厚兴趣但又缺乏系统知识的“小白”,我一直在寻找一本能够引导我入门算法学习的优秀教材。在朋友的推荐下,我购入了《零基础学算法 第3版》。翻开这本书,扑面而来的是一种亲切感,仿佛作者正是坐在我旁边,用最通俗易懂的语言为我讲解那些曾经让我望而却步的抽象概念。书中的每一个章节都如同精心设计的阶梯,从最基础的数据结构和排序算法开始,循序渐进地带领我攀登算法的殿堂。我尤其欣赏书中对每一个算法的讲解方式,不仅仅是给出公式和代码,更是通过生动的图示和贴近生活的比喻,让我能够直观地理解算法的运作原理。比如,在讲解冒泡排序时,作者用“水底的气泡向上冒”的比喻,瞬间就让这个看似枯燥的排序过程变得鲜活起来。对于那些我曾经觉得“高深莫测”的递归、分治等思想,这本书也用极其细致的分解和实例,让我不再感到畏惧,而是能够一步步地跟随作者的思路去理解和掌握。我曾花费大量时间在网上寻找各种算法讲解,但往往因为过于专业或缺乏系统性而感到沮丧。而《零基础学算法 第3版》则恰好填补了这一空白,它就像一位经验丰富的引路人,在我迷茫时给予方向,在我困惑时点亮迷津。这本书的内容编排逻辑清晰,章节之间的过渡自然流畅,让我能够持续保持学习的动力。我坚信,这本书将是我算法学习道路上一个重要的里程碑,为我今后更深入的学习打下坚实的基础。
**学习体验流畅,从“硬核”到“有趣”的华丽转身** 一直以来,我对算法的印象都是“枯燥”、“抽象”、“难懂”。然而,《零基础学算法 第3版》彻底改变了我的这种看法。这本书在内容编排和语言风格上都力求让学习过程变得流畅而有趣。书中大量的图解,将复杂的算法逻辑可视化,让抽象的概念变得具体可感。我尤其喜欢那些色彩鲜艳、逻辑清晰的流程图和示意图,它们就像一个个小故事,将算法的每一步都生动地呈现在我眼前。作者的语言风格也非常接地气,没有使用过多生涩的技术术语,而是用一种轻松幽默的笔调来讲解。当我感到疲惫时,书中偶尔出现的一些小故事或者作者的“心语”,都能让我放松下来,重新找回学习的乐趣。这种在“硬核”的算法知识中注入“有趣”的元素,让我能够长时间保持专注,而不会感到厌倦。更重要的是,书中提供的练习题和挑战题,难度梯度设计得非常合理,既有巩固基础的题目,也有激发思考的难题,让我能够不断地挑战自己,并在解决问题的过程中获得成就感。这本书让我体验到了“学以致用”的乐趣,也让我对算法学习不再心存畏惧,而是充满期待。
勉强给三分吧,算法这种东西要结合很多本书一起看过,才会懂。关于排序以及树形结构讲的还算不错。
很好的入门的算法书籍。
全书几乎是代码填充,后半部分更夸张。
勉强给三分吧,算法这种东西要结合很多本书一起看过,才会懂。关于排序以及树形结构讲的还算不错。
全书几乎是代码填充,后半部分更夸张。