前言

“算法和数据结构”是计算机及其应用专业的一门核心课程,由于该课程的理论性较强,很多人觉得学习起来比较抽象,在学习时感觉掌握了相关知识,但是放下书本后又没有什么印象。其实,算法和数据结构课程的实践性是很强的,不只是要掌握理论上的方法,还必须将这些方法应用到程序设计的实践中去。鉴于此,作者编写了本书。本书没有详细介绍各种数据结构的原理,而是重点介绍各种数据结构的实现方法,及相应的具体程序代码。

书中的所有程序都是在Dev-C++开发环境中编写而成的,本书的附录简单介绍了该开发环境的使用。

本书内容

本书分上、下两篇,共10章。第1~5章介绍了常用算法和数据结构的相应代码,第6~8章介绍了使用数据结构和算法解决一些经典问题的程序,第9章介绍了部分信息学奥赛试题的解题代码,第10章给出了与算法和数据结构相关的常见面试题。各章内容如下:

第1章介绍一些基础算法的使用,如枚举(穷举)算法、递推算法、递归算法、分治算法、贪婪算法、试探算法、模拟算法等,并编写了相应的实例代码演示这些算法的具体实现方法。

第2章介绍简单数据结构的实现,主要有线性表、栈、队列这3种数据结构的相关操作代码和实例。

第3章介绍复杂数据结构的实现,主要有二叉树和图这两种数据结构的相关操作代码,并介绍了赫夫曼树、图的最小生成树、图的最短路径等相关代码。

第4章介绍常见的排序算法,包括冒泡排序法、快速排序法、简单选择排序法、堆排序法、直接插入排序法、希尔(Shell)排序法、合并排序法等常见排序方法的原理及实现代码。

第5章介绍常见的查找算法,包括顺序查找、折半查找、二叉排序树、索引查找、散列表等内容。

第6章介绍通过数据结构解决常见数学问题的内容,包括计算完数、亲密数、水仙花数,计算素数,哥德巴赫猜想,计算阶乘,求π的近似值,方程求解,矩阵运算,一元多项式运算等内容。

第7章介绍如何解决经典的数据结构问题,包括约瑟夫环、大整数四则运算、进制转换、括号匹配、中序式转后序式、停车场管理、迷宫求解、LZW压缩的实现等内容。

第8章介绍如何解决经典算法问题,包括百钱买百鸡、五家共井、鸡兔同笼、猴子吃桃、舍罕王的赏赐、魔术方阵、汉诺塔、背包问题、马踏棋盘、八皇后等经典算法问题的求解代码,最后还介绍了一些趣味游戏的代码。

第9章介绍部分信息学奥赛试题的解题过程及相应的参考程序。

第10章给出了一些与算法和数据结构相关的常见面试题及其解析。

本书特点

·由浅入深:本书从日常生活中常见的实例入手,引领读者进入算法和数据结构的抽象世界。

·简单易学:本书尽量使用读者容易理解的、简单的语言来描述算法和数据结构,对于一些复杂的内容,采用图文并茂的方式介绍其原理,使读者能很快理解相关知识。

·代码详尽:为了便于读者理解相应的知识点,本书对每一个知识点都提供了完整、详细的代码,读者可通过阅读代码并上机调试来逐步体会、理解相应的知识点(书中所有的代码都用C语言编写,因此要求读者对C语言的基本语法有所了解)。

读者对象

·程序设计初学者。

·大中专院校教师、学生。

·信息学奥赛选手。

·计算机爱好者。

由于本书需要编写的代码很多,许多问题也存在多种解法,而本书篇幅有限,加上编者水平和学识有限,所以不能全部列出所有相关程序。对于本书提供的源程序,编者在Dev-C++环境中全部调试通过。

尽管编者竭尽全力减少书中错误,但百密一疏,书中难免有疏漏之处,敬请广大读者朋友批评指正,并多多提出宝贵意见。

编者