前言

可以将算法理解为由基本运算及规定的运算顺序所构成的完整解题步骤;或者看成按照要求设计好的有限的确切计算序列,并且这样的步骤和序列可以解决一类问题。对于任何一门编程语言来说,算法都是“程序”的灵魂。正是因为算法如此重要,所以笔者精心编写了本书,希望通过书中的内容引领广大读者一起探讨学习算法的奥秘,带领广大读者真正步入程序开发的高级世界。这是一本讲解C语言算法核心内容和具体用法的书,可作为C语言初学者的入门教程,同时也可为专业程序开发人士提供一些参考。本书以“讲清语法、学以致用”为指导思想,不仅仅将笔墨局限于语法讲解上,而且还通过一个个鲜活、典型的小实例来达到学以致用的目的。

算法还重要吗

我们先不要给算法是否还重要轻易地下一个结论,现在先来看看一种现象:哪种语言是开发者们可以高高兴兴地用来编程的?在当前的市面中,基本上每个月都会有一些对语言使用程度做的排名。其实,编程语言又能体现出算法的相关价值。也许你掌握了好几种语言,但随着工作时间的增加和对技术的深入研究,你会发现:不是具体的技术而是算法这些基本的东西成为技术深入的“软肋”,特别是在紧要关口,这个“软肋”往往就会更疼。

到目前为止,笔者认为自己目前工作中创造性东西比以前少了很多。很多算法已经被包装到了语言和工具中,作为一个开发者,也就不像以前那样费力地去学习了。而往往有些算法只适用于本语言或工具,而且只能解决某些问题,移植到别的情况下则无法使用。笔者也是在开始学习C语言后才感到算法适用范围有所不同。而最为别扭的是,你发现以前在用ASP.NET和Visual Studio开发工具中对于有些问题已经界定好了思路。人都是懒惰的,既然有现成的东西可用,为何要费力去创新?这也就导致了长期使用单一编程环境的开发者视野上比较狭隘。开发者很难有属于自己的思维方式,这就是有些人说自己做到一定程度后成了熟练“代码工人”的原因。

Ruby之父松本行弘就曾表示,注重的是算法而不是工具。如果没有自己的思维方式和编程逻辑,很容易对某种具体的技术或者工具产生依赖性,而这些编程工具和技术往往是国外开发的。假设有一天我们没有这些现成的工具和技术该怎么办?岂不是一穷二白了吗?但是如果有了稳固的算法,思维编程世界里的东西都不可怕。

算法是一种本质的回归

现实世界的变化真是快,仿佛前天刚刚出了Java,而昨天又出了一个C#,明天和后天还不知道要出一个什么XXX¥¥语言和新技术,于是广大程序员们就成了那赶潮大军中的一员。越往后走就会发现:越深入,步伐走得越慢,需要了解的技术就越多,做的东西越深。造成越来越力不从心的原因是“内功”不到位。C、C#、Java只是用来练习“武功”的招式,“内功”则是这些花哨武功招式后的本质。招式可以有很多种,但是如果没有“内功”,则招式变换再多也只是表面文章罢了,这样注定成不了一个名副其实的“武林高手”。

本书的内容

本书共分15章,循序渐进、由浅入深地详细讲解算法的核心内容,并通过具体实例的实现过程演练各个知识点的具体用法。本书首先详细讲解算法的基础知识,剖析了将算法称为“程序灵魂”的原因。然后详细讲解算法技术的核心内容,主要包括八大算法思想、数据结构、树、图、查找、内部排序、外部排序和文件等知识点的具体用法。接下来通过具体实例详细讲解各种算法经典问题的解决方案,主要包括解决经典的数据结构问题、解决数学问题、解决趣味问题、解决图像问题和解决奥赛问题的具体方案等。全书采用故事性、趣味性相结合的讲解方式,还穿插了学习技巧和职场生存法则,讲解了程序员所必须掌握的基本素养;并且紧跟时代潮流,讲解了算法技术在现实编程项目中的作用和具体用法。

本书特色

本书内容相当丰富,实例内容覆盖全面。我们的目标是通过一本图书,提供多本图书的价值,读者可以根据自己的需要有选择地阅读。在内容的编写上,本书具有以下特色。

(1)结构合理

从读者的实际需要出发,科学安排知识结构,内容由浅入深、叙述清楚,具有很强的知识性和实用性,几乎涵盖了C语言算法所有的知识点。

(2)易学易懂

本书条理清晰、语言简洁,可帮助读者快速掌握每个知识点;每个部分既相互连贯又自成体系,使读者既可以按照本书编排的章节顺序进行学习,也可以根据自己的需求对某一章节进行有针对性的学习。

(3)实用性强

本书彻底摒弃枯燥的理论和简单的操作,注重实用性和可操作性,详细讲解了各个部分的源码知识,使读者在掌握相关的操作技能的同时,还能学习到相应的基础知识。

(4)案例精讲,深入剖析

本书有许多经典示例,使读者不但对书中的理论知识进行了系统的复习,而且能够从实战中轻松掌握各个知识点的综合运用技巧,为读者将来更深层次的学习打下坚实的基础。

(5)附带教学资源丰富

本书附带的光盘中包含丰富的教学资源,既有长时间的实例讲解视频,也有实用的知识点讲解视频,还有附赠的综合实例。通过这些附属资源,使读者的学习过程更加便捷。

■ daima:保存了本书中所有实例的完整源码。

■ PPT:为读者和教研人员设计了精美的PPT文件,供学习和教学使用。

■ 实例讲解视频:保存了本书中所有实例的讲解视频,讲解详细,便于读者理解、掌握。

■ 知识点讲解视频:保存了本书中各知识点的讲解视频,讲解细致并深入,便于读者课余时间学习并掌握。

(6)提供了完善的售后技术支持

为了给读者营造良好的学习环境,本书的策划团队提供了在线论坛www.topchuban.com,为读者提供服务。读者可以登录此网站,与本书作者探讨学习中遇到的问题。

读者对象

■ 初学C语言的自学者

■ 大中专院校计算机及相关专业学生

■ 从事软件开发的程序员

■ 编程爱好者

■ 有一定C基础的开发者或学生

■ 相关培训机构的老师和学员

致谢

参与本书编写工作的还有管西京、李冬艳、代林峰、黄河、曹臻、白桦、伍杰、刘英田、刘继虎、王玉芹、程星、朱万林、杨阳、徐亮等。本团队在本书的编写过程中,得到了电子工业出版社工作人员的大力支持,正是各位编辑的求实、耐心和效率才使本书得以快速出版。另外也十分感谢我的家人,在我写作的时候给予了我巨大的支持。另外,鉴于本团队水平有限,纰漏和不尽如人意之处在所难免,恳请读者提出意见或建议,以便修订并使之更臻完善。

编者

2013年8月