图书前言

数据结构课程总结和归纳了软件开发中常用的数据结构,并从数据逻辑结构、存储结构和基本运算算法设计3个层面来讨论问题的求解方法,以提高学生基本的数据组织和处理能力,为后续课程(如操作系统、数据库原理和编译原理等课程)的学习打下基础。

本书是编者根据多年的教学经验,参考近年来国内外出版的多种数据结构以及C++面向对象程序设计教材,考虑教与学的特点,合理地进行内容的取舍,精心组织编写而成的。本书采用C++语言面向对象方法描述数据结构和算法。全书由11章构成,各章内容如下:

第1章绪论,介绍数据结构的基本概念、采用C++语言描述算法的方法和特点、算法分析方法,以及怎样设计好算法等。

第2章线性表,介绍线性表的定义、线性表的两种主要存储结构和各种基本运算算法设计,最后通过示例讨论线性表的应用。

第3章栈和队列,介绍栈的定义、栈的存储结构、栈的各种基本运算算法设计和栈的应用,以及队列的定义、队列的存储结构、队列的各种基本运算算法设计和队列的应用。

第4章串,介绍串的基本概念、串的存储结构、串的各种基本运算算法设计和串的模式匹配算法。

第5章数组和广义表,介绍数组的基本概念、几种特殊矩阵的压缩存储方式、稀疏矩阵的压缩存储及相关算法设计,递归的定义和递归算法设计方法,广义表的定义、广义表的存储结构及相关算法设计方法。

第6章树和二叉树,介绍树的定义、树的逻辑结构表示方法、树的性质、树的基本运算和树的存储结构,二叉树的定义、二叉树的性质、二叉树的存储结构、二叉树的基本运算算法设计、二叉树的递归和非递归遍历算法、二叉树的构造、线索二叉树和哈夫曼树等。

第7章图,介绍图的定义、图的存储结构、图的基本运算算法设计、图的两种遍历算法以及图的应用(包括图的最小生成树、最短路径、拓扑排序和关键路径等)。

第8章查找,介绍查找的基本概念、线性表上的各种查找方法、树表上的各种查找方法以及哈希表查找方法等。

第9章内排序,介绍排序的基本概念、插入排序方法、交换排序方法、选择排序方法、归并排序方法和基数排序方法,并对各种排序方法进行了比较。

第10章外排序,介绍外排序的概念、外排序的基本步骤,重点讨论了磁盘排序中的各种算法。

第11章数据结构和STL,介绍STL的概念和使用STL设计数据结构程序的基本方法。

另外,附录A给出书中部分算法清单,附录B给出各章练习题中单项选择题部分的答案。

本书主要特点如下:

 结构清晰,内容丰富,文字叙述简洁明了,可读性强。

 图文并茂,全书用270多幅图来表述和讲解数据的组织结构和算法设计思想。

 力求归纳各类算法设计的规律,如单链表算法中很多是基于建表算法的,二叉树算法中很多是基于遍历算法的,图算法中很多是基于深度优先遍历的,如果读者掌握了建表算法、二叉树的遍历算法和图遍历算法,那么设计相关算法就会驾轻就熟了。

 深入讨论递归算法设计方法。递归算法设计是数据结构课程中的难点之一,编者从递归模型入手,介绍了从求解问题中提取递归模型的通用方法,讲解了从递归模型到递归算法设计的基本规律。

 书中含有大量的示例,所有算法设计示例均在Visual C++ 6.0环境中调试通过。

本书的编写工作得到湖北省教育厅和武汉大学教学研究项目《计算机科学与技术专业课程体系改革》的大力支持,并且清华大学出版社的魏江江主任全力支持本书的编写工作,编者在此一并表示衷心的感谢。为了便于教学,对于本书的课件和附录A的源程序等教学资源,读者可从清华大学出版社网站免费下载。

武汉大学计算机学院数据结构课程组的老师参加了本书的编写工作,中国劳动关系学院的陈良臣老师编写了部分章节。尽管编者不遗余力,由于水平所限,本书仍存在错误和不足之处,敬请广大教师和同学们批评指正,欢迎读者通过邮箱与编者联系,在此表示衷心的感谢。

编者2014年3月