
全书共9章,分别为绪论、线性表、栈和队列、串、数组和广义表、树、图、查找以及排序。全书用C语言作为算法描述语言,详细介绍了各种数据结构的特性、存储表示和有关运算的算法。本书概念清楚,内容丰富,其特点是通过具体实例,将数据结构中复杂的算法简单化,更加便于读者学习掌握。各章附有习题,附录为实验内容。
随着计算机软件和硬件的发展,计算机应用已经深入到社会的各个领域,各行各业都需要对大量的非数值数据进行存储、加工和管理。如何根据实际应用的要求,对数据进行有效的组织、存储和处理,进而编制出相应的高效率算法,这是“数据结构”这门课所要研究并加以解决的问题。通过对“数据结构”这门课程的学习,应使学生能应用数据结构的知识和技巧更好地进行算法和程序的设计,并为学习操作系统、编译技术和数据库等后续课程打下良好的基础。 本书共分9章。第1章绪论,主要介绍了数据结构的基本概念,并对算法的度量做了举例说明;在第2章至第7章分别讨论了线性表、栈和队列、串、数组和广义表、树以及图等几种基本类型的数据结构,内容包括它们的逻辑结构和存储结构,以及在各种存储结构下相应运算的算法,并在讨论基本运算的基础上给出一些应用例子;第8章和第9章讨论查找和排序,介绍了常用的几种查找和排序的方法。在本书中,大多数算法都给出了采用C语言描述的算法,这些算法加上主函数后,都可以上机运行。 本书是在2005年编写的《数据结构(第2版)》的基础上重新修订的。在本次修订中,增加了一部分算法和应用实例,每章增加了实验,对文字上的错误进行了改正。 本书由南京师范大学计算机科学与技术学院刘清、张小勇和王琼编著,其中第1章、第3章、第6章、第9章由刘清编写;第2章、第4章、第5章由张小勇编写;第7章、第8章由王琼编写。另外,金京犬、孙双、沈春龙、曹国华、孙健、吴蓉蓉也参与了本教材的编写工作。刘清统编了全稿。由于作者水平有限,书中难免出现错误,敬请读者批评指正。 作 者 2010年1月于南京
第1章 绪论 (1) 1.1 什么是数据结构 (1) 1.2 概念、术语 (2) 1.3 算法的描述及分析 (3) 1.3.1 算法的描述方法 (3) 1.3.2 时间复杂度 (4) 1.3.3 空间复杂度 (5) 1.3.4 算法分析实例 (5) 习题1 (6) 第2章 线性表 (8) 2.1 逻辑结构 (8) 2.2 顺序存储结构 (9) 2.2.1 顺序存储结构的概念 (9) 2.2.2 顺序存储结构下的操作 (10) 2.2.3 效率分析 (11) 2.2.4 顺序存储结构的特点 (12) 2.3 链式存储结构 (12) 2.3.1 链式存储结构的概念 (12) 2.3.2 链式存储结构下的操作 (13) 2.3.3 链式存储结构的特点 (18) 2.4 单向循环链表 (18) 2.5 双向链表 (20) 2.6 一元多项式的存储、运算 (22) 习题2 (25) 第3章 栈和队列 (27) 3.1 栈、队列的应用背景 (27) 3.1.1 栈的应用背景 (27) 3.1.2 队列的应用背景 (27) 3.2 堆栈 (27) 3.2.1 栈的定义和基本运算 (27) 3.2.2 栈的表示和实现 (28) 3.2.3 栈的应用 (32) 3.3 队列 (40) 3.3.1 队列的定义及运算 (40) 3.3.2 队列的存储结构 (41) 3.3.3 队列的应用 (44) 习题3 (45) 第4章 串 (47) 4.1 串及其操作 (47) 4.1.1 串的逻辑结构 (47) 4.1.2 基本运算 (48) 4.2 串的存储结构 (48) 4.2.1 顺序存储结构 (48) 4.2.2 链式存储结构 (49) 4.2.3 堆存储结构 (50) 4.3 串的基本运算实现 (51) 4.4 串的模式匹配运算 (52) 4.4.1 BF算法(Brute-Force) (52) 4.4.2 无回溯的模式匹配算法(KMP算法) (56) 习题4 (59) 第5章 数组和广义表 (60) 5.1 数组的定义、运算 (60) 5.2 数组的顺序存储结构 (61) 5.3 矩阵的压缩存储 (62) 5.3.1 特殊矩阵 (62) 5.3.2 稀疏矩阵 (64) 5.4 广义表 (69) 5.4.1 广义表定义 (70) 5.4.2 广义表的存储结构 (70) 5.4.3 广义表的基本操作 (72) 习题5 (73) 第6章 树 (75) 6.1 树结构的定义和基本操作 (75) 6.1.1 树的定义 (75) 6.1.2 树的基本术语 (76) 6.1.3 树的基本操作 (76) 6.2 二叉树 (77) 6.2.1 定义及其操作 (77) 6.2.2 二叉树的性质 (77) 6.2.3 二叉树的存储结构 (78) 6.3 遍历二叉树 (80) 6.3.1 二叉树遍历的递归算法 (80) 6.3.2 二叉树遍历的非递归算法 (82) 6.3.3 二叉树的层次遍历算法 (84) 6.3.4 遍历算法的应用 (85) 6.4 树和森林 (88) 6.4.1 树的存储结构 (88) 6.4.2 树与二叉树的转换 (91) 6.4.3 森林与二叉树的转换 (91) 6.5 树的应用 (92) 6.5.1 二叉排序树 (92) 6.5.2 哈夫曼树以及应用 (96) 习题6 (99) 第7章 图 (101) 7.1 图的定义和术语 (101) 7.2 图的存储结构 (103) 7.2.1 邻接矩阵 (103) 7.2.2 邻接表 (104) 7.3 图的遍历 (106) 7.3.1 深度优先搜索DFS(Depth First Search) (106) 7.3.2 广度优先搜索BFS(Breadth First Search)(108) 7.4 生成树 (109) 7.4.1 概念 (109) 7.4.2 最小生成树(最小支撑树) (110) 7.5 最短路径 (114) 7.5.1 求某源点到其余各顶点的最短路径 (114) 7.5.2 每对顶点之间的最短路径 (116) 7.6 拓扑排序 (117) 7.6.1 顶点活动网 (117) 7.6.2 拓扑排序 (117) 习题7 (120) 第8章 查找 (122) 8.1 线性表的查找 (122) 8.1.1 顺序查找 (122) 8.1.2 折半查找 (122) 8.1.3 分块查找 (124) 8.2 树表的查找 (125) 8.2.1 二叉查找树 (125) 8.2.2 二叉平衡树 (126) 8.2.3 B_树 (129) 8.3 哈希表 (132) 8.3.1 哈希表的定义 (132) 8.3.2 哈希函数的构造 (133) 8.3.3 冲突处理方法 (135) 8.3.4 查找及分析 (137) 习题8 (137) 第9章 排序 (139) 9.1 插入排序 (139) 9.1.1 直接插入排序 (139) 9.1.2 希尔排序 (140) 9.2 交换排序 (141) 9.2.1 冒泡(简单交换排序) (141) 9.2.2 快速排序 (142) 9.3 选择排序 (144) 9.3.1 直接选择排序 (144) 9.3.2 树形选择排序 (145) 9.4 归并排序 (148) 习题9 (148) 附录A 实验 (150) 实验一 线性表的顺序存储实验 (150) 一、实验目的 (150) 二、实验内容 (150) 实验二 单链表实验 (154) 一、实验目的 (154) 二、实验内容 (154) 实验三 栈、队列的实现及应用 (160) 一、实验目的 (160) 二、实验内容 (160) 实验四 串及数组的实验 (169) 一、实验目的 (169) 二、实验内容 (169) 实验五 二叉树的基本操作 (176) 一、实验目的 (176) 二、实验内容 (176) 实验六 查找 (182) 一、实验目的 (182) 二、实验内容 (182) 实验七 排序 (187) 一、实验目的 (187) 二、实验内容 (187) 参考书目 (194)
http://www.hxedu.com.cn/hxedu/fg/book/bookinfo.html?code=G0110820